Почему зарегистрированные события исчезают, когда элемент удален из DOM?

Этот jQuery 1.3.2 кода добавляют элемент к странице, регистрирует событие "щелчка", затем удаляет и повторно прикрепляет элемент:

var button = $('<button>Click me!</button>')
  .click(function(){ alert("Hello") })
  .appendTo('body');

$('body').html('');

button.appendTo('body');

Кнопка появляется на странице как ожидалось, но нажатие на нее ничего не делает. Я хотел бы знать, почему обработчики событий были удалены из объекта.

Примечание: Я знаю о решениях такой как jQuery.live() или clone(true) или использование appendTo без удаления. То, что я ищу, является объяснением, не решением или обходным решением.

Править: Я предполагаю, что это могло быть произвольным и парадоксальным проектным решением DOM. Объяснение как, "Поскольку это - путь раздел X из спецификации Y, хочет, чтобы она была", был бы прекрасен.

6
задан Victor Nicollet 8 January 2010 в 14:11
поделиться

1 ответ

Когда вы удаляете элемент с флэш-накопителя с помощью jQuery, все данные (включая обработчики событий), удерживаемые jQuery на этом элементе, будут уничтожены. Это делается во избежание утечек памяти.

Это не является функцией (или ошибкой) API DOM. Это просто jQuery.

6
ответ дан 9 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: