Jquery. После клонирования элемента на него не срабатывает событие. Почему?

Есть примерно такой код.
var el = $( '.element' ).clone();
$( el ).appendTo( 'div' );

$('.element').on('dblclick', function(){
    alert();
});

Проблема в том, что если дважды кликнуть на старый элемент, алерт выскочит, а двойной клик по склонированному элементу алерт не вызывает. Часто сталкиваюсь с тем, что динамически созданные элементы вот так вот не отвечают на события. Как с этим грамотно бороться?
  • Вопрос задан
  • 1995 просмотров
Решения вопроса 1
paradokso
@paradokso
Начинающий фронт-эндер
Вы присвоили ивент слушатель объекту в момент создания страницы. при клонировании слушатель уже не слушает :), поэтому его необходимо вешать на родительский контейнер:
$('#parent').on('dblclick', '.element', function(){
    alert();
});

И будет вам счастье

з.ы. почитайте о таком понятии как bubbling

з.ы.ы. для лучшего понимания основ джейквири пройдитесь по короткому курсу - try.jquery.com
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
finnish
@finnish
Роман прав, делегирование событий - наиболее правильный способ.
Если же у Вас есть какие-то ограничения на использование этого метода, посмотрите на аргументы $.fn.clone() - вы можете клонировать элемент вместе со всеми слушателями.
Ответ написан
Комментировать
$(document).on('dblclick', '.element', function(){
    alert();
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы