Я создал серию настраиваемых событий jQuery для использования в мобильных веб-приложениях. Они отлично работают и проверены. Однако я столкнулся с небольшой проблемой, которую не могу понять.
Я использую .clone()
несколько элементов в DOM, которые содержат кнопку. К кнопке привязаны некоторые настраиваемые события (события привязаны с помощью .on()
), но. К сожалению, когда я использую jQuery .clone()
, привязки не сохраняются, и мне приходится добавлять их снова.
Кто-нибудь сталкивался с этим раньше, знает ли кто-нибудь о возможной работе? Я думал, что использование .on()
должно было сохранить привязку для элементов, которые существуют сейчас или в будущем?
javascript
jquery
BenM
источник
источник
.clone
; это логика делегирования событий jQuery и работает, если вы передаете дополнительный селектор в.on
.Ответы:
Я думаю, вам следует использовать эту перегрузку метода .clone () :
Остерегайтесь того, что на
.on()
самом деле события привязываются не к целям, а к элементу , которому вы делегируете полномочия. Итак, если у вас есть:События фактически привязаны к
#container
. Когда происходит щелчок по.button
элементу, он всплывает к#container
элементу. Элемент, вызвавший событие, оценивается по параметру селектора,.on()
и, если он совпадает, выполняется обработчик событий. Так работает делегирование событий.Если вы клонируете элемент #container, вам необходимо выполнить глубокое клонирование с событиями и данными для сохранения привязок, сделанных с помощью
.on()
.В этом не было бы необходимости, если бы вы использовали
.on()
родительский элемент#container
.источник
.clone()
общепринятых аргументов. FML. Спасибо за вашу помощь..clone()
не клонировать.data()
(какdata-xxxx="somedata"
и данные в DOM) .. Это тоже исправляет!click
событие, чтобы добавить новый клонированный div.ready
не работалВы должны знать, что функция глубокого клонирования была добавлена в версию jQuery 1.5.
Дополнительная информация по этой теме:
http://api.jquery.com/clone/
источник