2011-12-12 102 views
23

我知道.live()现已被弃用但我似乎无法改变它并保持功能。Jquery .on与.live

我只是有一个关于jQuery中的.on()函数的简单问题。我目前使用.live()here

像这样:

$('table tr th').live("click", function() { 
}); 

但是,当我尝试更换.live().on()它不再工作,因为它是应该。

我试图把在

$('table tr th').on("click", function() { 
}); 

以及

$('table tr').live("click", "th", function() { 
}); 

$('table tr').delegate("th", "click", function() { 
}); 

,但无济于事。

这是什么和我可以采取哪些措施使其正常工作?

+1

可能重复[jQuery的1.7 - 车削现场()插入()](http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live-插入) –

+0

@FelixKling我试图避免使用'$(document)'来精确地模拟调用。我想知道是否有另一种方法可以做到这一点,这更符合jQuery API网站上的示例。 –

+0

只需取最近的现有元素(祖先)(然后再更对应'.delegate')。 –

回答

31

on()功能需要一个语法更新,你应该改变你的代码:

$('body').on("click", "table tr th", function()... 

退房本文的详细信息:http://www.andismith.com/blog/2011/11/on-and-off/

+0

非常真实,我会更新上下文。 –

0

我以某种方式猜测你正在将tr元素添加到你的表格中,而不是th

$('table').on("click", "tr th", function(){}); 
+0

''由一个数组产生并写入表中的第一个''。你的解决方案不起作用,但... –

+0

这将无法正常工作,他的表被替换为'.replaceWith()' –

9

试试这个:

$('table tr th').live("click", function() { 

应该

$(document).on("click", "table tr th", function() { 

那你是怎么会准确地模仿.live电话。您当然可以根据您的DOM结构将您的选择器从文档限制到更有意义的内容。

编辑:

只是为了澄清,在你的榜样,您需要使用$(document).on(...,因为该表没有任何父母和你的页面的生命过程中被替换。

+0

因此,因为我在代码中替换了表,所以我需要使用'$(document)'so这个电话会继续工作吗? –

+0

@Andrew:不,层次结构中的任何现有元素都会执行。 –

+0

@FelixKling啊好的,谢谢! –

2

确保所选元素(TH/TR)在最初加载页面时存在。 如果此选择器稍后添加到DOM,新的.on将不起作用。

尝试的

$('body').on('click', 'thesSelectorForYourTriggerElement', function(){ 
    //callback 
});