2014-10-18 4 views
0

Приносим извинения, если вопрос сформулирован неаккуратно. Я просто где-то в начале понимания jquery.Почему несколько блоков не работают после клонирования?

Я хочу реализовать построитель форм на основе перетаскивания.

Я добавил кнопку, чтобы клонировать ушедший элемент. Но после того, как кнопки клонирования «remove» и «clone» не работают.

jsfiddle.net/284mx1vn/

Спасибо за вашу помощь!

ответ

0

Я просто отрегулировать ваш Fiddle

Я добавил две строки

$(document).on("click", ".remove", function(){ 
    $(this).closest(".input-block").remove();}); 
$(document).on("click", ".add", function(){ 
    $(this).closest(".input-block").clone().appendTo("#drop-space"); 
}); 

так это работает для динамически создаваемых элементов, и добавил класс «добавить» к «добавить» - для удобства.
Проблема заключалась в том, что события должны быть связаны с элементами, уже существующими в DOM при загрузке документа. В качестве решения можно использовать делегирование делегирования - это значит делегировать событие (в данном случае событие click для кнопок) из статического родительского элемента, например. $(document). Этот родительский элемент делегирует событие всем дочерним элементам класса, используя функцию jquery on(), даже если эти элементы будут добавлены позже.
Для справки: http://api.jquery.com/on/ и https://api.jquery.com/on/#on-events-selector-data-handler, раздел «Прямые и делегированные события»:

«обработчики событий привязанные только к выбранным в данный момент элементов, они должны существовать на странице в то время, что ваш код делает вызов .на()."

+0

спасибо, но почему он добавляет две копии при первом нажатии? – fte

+0

@fte Двойной при первом щелчке - это просто ваше первоначальное добавление/удаление, прикрепленное к клику, когда вы клонируете div. Те, которые уже работали только для первого добавленного блока и могут быть просто удалены. –

+0

он работает, спасибо! – fte

Смежные вопросы