В зависимости от того, какую версию jQuery вы используете, вы должны использовать либо .delegate()
(до jQuery 1.7), либо .on()
(jQuery 1.7+), чтобы иметь делегированную обработку событий, которая будет обрабатывать события для элементов, которые добавляются динамически.Примечание. .live()
устарело во всех версиях jQuery, поэтому его больше не следует использовать.
Используя .on()
, вы можете использовать это:
$("#attendance").on("keydown", "input:last", function(e) {
if (e.which == 9) {
var $this = $(this);
var num = parseInt($this.attr('name').match(/\d+(,\d+)?/)[0]) + 1;
$this.parent().append('<input type="text" name="attendance[' + num +']" value="Name and Position" class="medium" />');
}
});
Использование .delegate()
будетбыть похожим (кроме аргументов в другом порядке).Вы можете увидеть их оба в jQuery doc .delegate()
и .on()
.
Делегированная обработка событий работает с использованием возможности "пузыривания" некоторых событий javascript,Это позволяет вам прикрепить обработчик событий к родительскому объекту (который не приходит и не уходит) и позволяет ему просматривать каждое событие, которое «всплывает» до него от дочернего объекта, проверять, происходит ли событие от объекта ссоответствующий селектор, и, если это так, выполните свой код обработки событий.Таким образом, когда объекты приходят и уходят, их события по-прежнему обрабатываются соответствующим образом.
Поскольку вы изначально делали что-то, вы привязывали бы обработчик событий непосредственно к объекту, который соответствовал селектору 'section#attendance input:last'
в то время, когдакод привязки события выполнен.С тех пор он был привязан непосредственно к этому конкретному объекту независимо от того, соответствует ли этот объект селектору или добавляются ли новые объекты в DOM, которые будут соответствовать селектору.Делегированная обработка событий с использованием .delegate()
или .on()
позволяет поведению обработки событий быть более динамичным - автоматически приспосабливаясь к изменениям в DOM.Вам просто нужно привязать событие к общему родительскому объекту, который не будет изменяться, и он может автоматически отслеживать все его дочерние элементы.