2011-08-05 184 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'); 
}); 

它结合了点击功能与类创建的任何元素x

0

您需要使用.live功能内容的动态生成。

所以用

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

你是第一个创建监听到所有.x元素(其中有大概为零),然后再加入新的元素.x更换

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

解决办法有两种:一种是使用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该表有错字,您错过了开始的tr标记:

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