Подтвердить что ты не робот

Являются ли события потерянными в jQuery, когда вы удаляете() элемент и добавляете() его в другое место?

Что происходит в jQuery, когда вы удаляете() элемент и добавляете() его в другое место?

Похоже, что события отцеплены - как будто вы просто вставляете свежий html (что, я думаю, это то, что происходит). Но его также возможно, что в моем коде есть ошибка, поэтому я просто хотел проверить это поведение, прежде чем продолжить.

Если это так - есть ли какие-либо простые способы переосмыслить события только в той части HTML или другой способ перемещения элемента без потери события в первую очередь.

4b9b3361

Ответ 1

Да, подход jQuery с remove() - это отвязать все связанные с jQuery собственные bind (чтобы предотвратить утечку памяти).

Однако, если вы просто хотите что-то переместить в DOM, вам сначала не нужно remove() его. Просто append к вашему сердечному содержимому, привязки событий будут придерживаться:)

Например, вставьте это в свой firebug на этой странице:

$('li.wmd-button:eq(2)').click(function(){ alert('still here!') }).appendTo(document.body)

И теперь прокрутите страницу вниз до нижней части этой страницы и щелкните значок маленького глобуса, который теперь похоронен под нижним колонтитулом SO. Вы получите alert. Все, потому что я сначала позаботился remove.

Ответ 2

Функция detach() jQuery совпадает с функцией remove(), но сохраняет обработчики событий в возвращаемом объекте. Если вам нужно удалить элемент и поместить его где-то еще со всем, что вы можете просто использовать.

var objectWithEvents = $('#old').detach();
$('#new').append(objectWithEvents);

Проверьте документы API здесь: http://api.jquery.com/detach/

Ответ 3

используйте jQuery1.3.1 live() для привязки событий, и вам не нужно беспокоиться об этом.

Обновление. Текущие события теперь устарели, но вы можете получить тот же эффект от $(document).on().