Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   jQuery: -- Не работают скрипты в блоках созданных при помощи jQuery clone(), append() (https://javascript.ru/forum/events/18880-jquery-ne-rabotayut-skripty-v-blokakh-sozdannykh-pri-pomoshhi-jquery-clone-append.html)

artnik 19.07.2011 13:47

jQuery: -- Не работают скрипты в блоках созданных при помощи jQuery clone(), append()
 
Как можно заставить jQuery запускать события, к примеру при клике, в блоках созданных через append(), after() и т.п.
События почему-то срабатывают только для обычных блоков выведенных PHP скриптом.

К примеру, вот готовый миникод:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<div class="event">Кликни на меня</div>

<script> 
$('.event').click(function() {
    alert('произошел клик')
}); 
$('.event').after(' 
   <div class="event">Кликни на меня2</div>
 '); 
</script>


Если нажать на "Кликни меня2" то ничего не произойдет. Почему так? И как эту траблу решить?

PS: <div onclick="blabla()"> срабатывает если в функции не использовать jQuery

kobezzza 19.07.2011 14:17

Господи, да что же вы не пользуетесь поиском, перед тем как задавать вопросы... нужно делегировать события для динамичных DOM элементов, в jquery для этого аж 2 метода: live и delegate

ваый 19.07.2011 14:23

да, раз 5 уже за последние дни!.. резюме сказанного выше:
<div class="event">Кликни на меня</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$('.event').live('click', function() {
    alert('произошел клик');
})
.after('<div class="event">Кликни на меня2</div>');
</script>

artnik 19.07.2011 14:56

Работает, спасибо!

kobezzza, поиском я пользоваться умею, но как можно что-то найти если не знаеш как сформулиловать запрос, неужели я бы додумался написать "делегировать события для динамичных DOM элементов", если мне нужно было всего лишь событие при клике подрихтовать

artnik 19.07.2011 14:59

А еще небольшо вопрос из этой-же темы. Если вывести onclick="blabla()" то как можно перехватить текущи блок методом $(this)?

Пример:
<div class="event" onClick="blabla();">Кликани меня</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function blabla() {
	this.style.color = '#c00';
	$(this).hide();
}
</script>


В примере не работает ни один ни другой способ(

ваый 19.07.2011 15:41

<div class="event" onclick="blabla(this);">Кликани меня</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function blabla(obj) {
	obj.style.color = '#c00';
	$(obj).hide();
}
</script>

artnik 19.07.2011 15:45

ваый, ты лучший!!! Спсибенчик тебе, ато эти две бздюшки не давали мне нормально писать скрипты, приходилось чачу воротить

ваый 19.07.2011 15:51

ну честно говоря, "чача" осталась.. если уж используешь jquery, так давай по-полной. вместо того, что у тебя, смотри что можно:
<div class="event">Кликани меня</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$('.event').live('click', function() {
    $(this).css({
        color: '#C00',
        backgroundColor: '#EFC'
    })
    .hide();
});
</script>


Часовой пояс GMT +3, время: 14:27.