2011-08-05 2 views
2

У меня есть кусок JQuery, который создает строку в таблице, а в одной из ячеек есть X, который окружен классом. Когда он динамически создается, а затем щелкнет на прослушивателе кликов, он не срабатывает. Вот код.JQuery динамически создает ссылку

$('#add').click(function() { 
    $('#table').append('<td class="x">X</td></tr>'); 
}); 
$('.x').click(function() { 
    alert('Fired'); 
}); 
+0

Вы не добавляете «TR» в начале своей новой строки. –

ответ

4

Поскольку <td> элемент еще не существует при регистрации обработчика события, вы должны использовать live() или delegate() для обработчика срабатывать позже:

$(".x").live("click", function() { 
    alert("Fired"); 
}); 
0
$(".x").live("click", function() 
{ 
    alert("Fired"); 
}); 

Живой добавляет события к чему-либо, добавленному позже в DOM, а также к тому, что в настоящее время существует.

0

Вместо

$('.x').click(function() { 
    alert('Fired'); 
}); 

Изменения в этой

$('.x').live('click', function() { 
    alert('Fired'); 
}); 

Он связывает функцию щелчка на любой созданный элемент с классом х

0

Вы должны использовать .live функцию, содержание которой динамически генерируется.

так заменить

$('.x').click(function() { 

с

$('.x').live('click',function() { 
0

Вы первое создания слушателя для всех .x элементов (из которых предположительно равен нуль), то в дальнейшем при добавлении новых .x элементов.

Есть два решения: один заключается в использовании JQuery live, другой переписать код:

var xClickHandler = function() { 
    alert('Fired'); 
}; 
$('#add').click(function() { 
    $('#table').append(
     $('<td class="x">X</td></tr>').click(xClickHandler); 
    ); 
}); 
0

Использование live вместо click:

$('.x').live("click", function() { 
    alert('Fired'); 
}); 
0

HTML, вы добавления к в таблице есть опечатка, вы пропустили тег начала:

$('#add').click(function() { 
    $('#table').append('<tr><td class="x">X</td></tr>'); 
}); 
$('.x').click(function() { 
    alert('Fired'); 
}); 
Смежные вопросы