2010-12-14 83 views
12

我已经产生了用jQuery一些HTML链接,并将其添加到一些DIV 但它接缝,我不能调用点击方法现在,当这些元素被添加(它的工作确定的时候被硬编码到HTML) $('#something a').click(function() ...jQuery的点击附加元素

有谁知道一个解决方案?

回答

21

使用.delegate()对于这些情况:

$('#something').delegate('a', 'click', function() { 

这个高度上#something一个click处理程序,而不是方向内<a>元素...所以它适用于后来追加的锚。 (有几个原因更糟)版本的另一种方法是.live()这样的:

$('#something a').live('click', function() { 
+0

@Nick - 为什么用活更糟?只是好奇,因为我用了很多。 – Josh 2010-12-14 18:26:19

+0

@Nick - 我真正感兴趣的 - 请你为什么.live()是糟糕的原因发表评论。干杯! – 2010-12-14 18:26:55

+4

@Josh,@Jakub - 用'.live()',让我们看看上面的代码 - '$('#a a')'选择器立即运行,但我们不在乎它发现了什么......结果被浪费了。另外,因为它附加到'document',*必须根据该选择器检查每个*'click'。随着'.delegate()'只有非常快'$(“#东西”)'选择得到运行,而我们使用的结果。也只有从内部'#something'需要进行检查,因为他们是在该父签点击,所以'.delegate()'地址2个性能的原因...有一个更昂贵的选择,收益更大。 – 2010-12-14 18:28:16

0

您需要使用直播功能,以确保点击事件被绑定到已添加到DOM页面后元素已加载:

$('#something a').live('click',function() ..... 
+0

效果很好,谢谢1 – Dejan 2010-12-14 21:33:35

4

什么也工作是添加[点击]事件的附加元素,像这样的时候:

$('<someElement>').click(function(){ 
    $('<someElement>').append('<htmlCodeToAppend>'); 
    $('<appendedElement>').click(function() { /* do something */ }); 
}); 

这种方法做这项工作,但我不知道我f有任何警告 - 也许其中一个专业人士可能会好好介入。

干杯, 埃里克