У меня проблема при преобразовании статической таблицы html в таблицу, сгенерированную JavaScript.Ранее мой обработчик щелчков кода js / jQuery для элементов данных в таблице был следующим:
$(function() {
$('my_table td').click(function(e) {
...handler code
});
Это работает нормально, но мне пришлось изменить свою таблицу, чтобы содержимое динамически генерировалось вJavaScript:
// 'table_contents' is "<table><tbody>...</tbody></table>"
$('#my_table').html(table_contents);
Когда я это делаю, я теряю обработчики кликов.Я полагаю, это не удивительно, так как я просто удаляю старый HTML и заменяю его новым HTML.Тем не менее, я не знаю, как справиться с этим правильно.Могу ли я просто дать моей анонимной функции имя и вызывать ее всякий раз, когда я изменяю html, или мне нужно делать что-то еще, например, явно добавлять прослушиватель событий для каждого нового элемента td
?И нужно ли что-нибудь делать для очистки после замены старого html, например, освобождая старый обработчик / слушатель?У js есть утечки памяти / ресурсов, которые я должен исправить вручную?
Спасибо.
РЕДАКТИРОВАТЬ
Извините за глупость, но я не могу получить предложенныйна / делегировать решения для работы.Мой тестовый HTML-код:
<div id="date_test">
<table><tbody><td>42</td></tbody></table>
</div>
Я пытался ответить на нажатие td
'42' тремя различными способами:
$("#date_test").on("click", "td", function() {
alert($(this).text());
});
$('#date_test').delegate('td', 'click', function() {
alert($(this).text());
});
$(function() {
$('#date_test td').click(function() {
alert($(this).text());
})
})
Из них только третийодин работает.Обратите внимание, что это полностью статический код;Это 3 разных теста.для первых двух случаев код никогда не выполняется;Я могу поставить синтаксическую ошибку вместо предупреждения, и это не имеет значения.Есть идеи, что я делаю не так?Я на jQuery 1.7.Спасибо.