jQuery clone() не клонирует привязки событий, даже с on()
Я создал ряд пользовательских событий jQuery для использования в мобильных веб-приложениях. Они отлично работают и были проверены. Однако я столкнулся с небольшой проблемой, которую мне трудно понять.
Я использую .clone() на нескольких элементах внутри DOM, которые содержат кнопку. Кнопка имеет некоторые из пользовательских событий, связанных с ним (события связаны с помощью .on()), но. К сожалению, когда я использую jQuery .clone(), привязки не сохраняются, и у меня есть чтобы добавить их снова.
кто-нибудь сталкивался с этим раньше, кто-нибудь знает потенциального обойти? Я думал, что с помощью .on() предполагалось сохранить привязку к элементам, которые существуют сейчас, или в будущем?
2 ответов:
Я думаю, что вы должны использовать эту перегрузку .clone () способ:
$element.clone(true, true);clone ([withDataAndEvents] [, deepWithDataAndEvents])
withDataAndEvents: логическое значение, указывающее, следует ли копировать обработчики событий и данные вместе с элементами. Значение по умолчанию-false.
deepWithDataAndEvents: логическое значение, указывающее, является ли событие обработчики и данные для всех дочерних элементов клонированного элемента должны быть скопированы. По умолчанию его значение соответствует значению первого аргумента (по умолчанию false).
помните, что
.on()фактически не привязывает события к целям, а к элементу, которому вы делегируете. Так что если у вас есть:$('#container').on('click', '.button', ...);события на самом деле привязаны к
#container. При нажатии на кнопку.buttonэлемент происходит, он пузырится до#containerэлемент элемент, который инициированное событие оценивается по параметру селектора.on()и если он совпадает, то выполняется обработчик событий. Вот как работает делегирование событий.если вы клонируете элемент # container, вы должны глубоко клонировать события и данные для Привязок, сделанных с помощью
.on()для сохранения.это не было бы необходимо, если бы вы использовали
.on()на родителя#container.
вы должны знать о том, что функция глубокого клонирования была добавлена в версию 1.5 jQuery.
дополнительная информация по этой теме:
Comments