2017-01-30 2 views
0

У меня есть пример here со столом, где динамически добавляются строки. Каждая строка должна инициировать событие:Событие, не инициированное динамически добавленными строками таблицы

$("#tblTest > tbody > tr").on("click", function(e){  
    alert();   
    }); 

Этот код не работает для динамически добавленных строк. В чем проблема?

+0

Два слова ** Событие делегирование **. =) – evolutionxbox

+3

Возможный дубликат [привязка события к динамически созданным элементам?] (Http://stackoverflow.com/questions/203198/event-binding-on-dynamically-created-elements) – Deep

ответ

3

Это добавляет щелчок к тр о создании. Вам нужно вместо этого атаковать клик на тём, а затем фильтровать до tr.

$("#tblTest > tbody").on("click", "tr", function(e){  
    alert();   
    }); 
+0

Переключите его в '> tr', так как это, по-видимому, требуется OP. знак равно – evolutionxbox

1

Попробуйте, как это ..

$(function() { 
    $(document).on("click", "#tblTest > tbody > tr", function(e) { 
    alert(); 
    }); 
}); 
+0

да, это сработает. –

+0

Вы пропустили '}); там – Ionut

+0

ya @ Ionut спасибо. –

1

Вы должны изменить свой код, чтобы использовать тело для случая .По:

$("body").on("click", "#tblTest > tbody > tr", function(e){  
    alert();   
    }); 
1

Для динамически добавляемых элементов необходимо использовать event delegation:

$(document).on("click", "#tblTest > tbody > tr", function(e){  
    alert('test');   
    }); 

Изменено Codepen.

1

Когда вы динамически добавляете строку, вы должны привязать новый прослушиватель onClick к добавленному элементу. Ваш код только добавляет слушателя к элементам, уже находящимся на странице; а не вновь созданные элементы. Что-то, как это будет работать нормально:

var AddRow = function(){ 
    // add element 
    $("#tblTest > tbody").append("<tr><td>Test name</td><td>Last anme</td></tr>"); 
    // add listener to new element 
    $("#tblTest > tbody > tr:last-of-type").on("click", function(e){  
      alert();   
    }); 
} 

: последний из-типа псевдо-селектор является ключом, чтобы избежать связывания нескольких слушателей к клеткам.

0

Вы можете использовать делегирование событий.

$(document).off('click.namespace').on('click.namespace', '#tblTest > tbody > tr', function (e) { 
alert();   
    }); 

Он будет перепроверять события. Так что динамически добавленные строки также связывают события.