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 |
Господи, да что же вы не пользуетесь поиском, перед тем как задавать вопросы... нужно делегировать события для динамичных DOM элементов, в jquery для этого аж 2 метода: live и delegate
|
да, раз 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>
|
Работает, спасибо!
kobezzza, поиском я пользоваться умею, но как можно что-то найти если не знаеш как сформулиловать запрос, неужели я бы додумался написать "делегировать события для динамичных DOM элементов", если мне нужно было всего лишь событие при клике подрихтовать |
А еще небольшо вопрос из этой-же темы. Если вывести 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>
В примере не работает ни один ни другой способ( |
<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>
|
ваый, ты лучший!!! Спсибенчик тебе, ато эти две бздюшки не давали мне нормально писать скрипты, приходилось чачу воротить
|
ну честно говоря, "чача" осталась.. если уж используешь 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, время: 09:49. |