Во-первых, я хотел бы знать, почему вам нужен другой идентификатор для каждого TD. Содержит ли идентификатор важную информацию, такую как индекс? В этой ситуации может быть лучше создать каждый TD внутри цикла. Кроме того, очевидно, что вы не можете присоединить обработчик событий к элементу DOM, который не существует! Его не нужно вводить в DOM, но он ДОЛЖЕН существовать в каком-то качестве.
jQuery's live () не является волшебной загадкой, он просто использует делегирование событий, поэтому он присоединяет событие к родительскому элементу, например к таблице, и затем решает, что происходит в зависимости от цели нажатия. Вот простой пример. Я регистрирую обработчик для элемента 'body', а затем каждый раз проверяю, какова цель, если это TD-элемент, я делаюSomething () ->
document.body.onclick = function(e) {
var realTarget = e ? e.target : window.event.srcElement;
if ( realTarget.nodeName.toLowerCase() === 'td' ) {
doSomething();
}
};
Делегирование событий основывается на так называемом пузырении событий (или «распространении»), которое является способом, которым современные браузеры реализуют модель событий. Каждое событие при срабатывании будет проходить вверх через DOM до тех пор, пока оно не будет дальше. Таким образом, если вы щелкнете на ссылку в абзаце, сработает событие щелчка якоря, а затем сработает событие щелчка и т. Д. И т. Д.