jQuery:使用.on()而不是.live()将事件处理程序附加到$('selector')对象

时间:2013-05-22 08:39:47

标签: jquery jquery-on jquery-1.9

我知道.live()已从jQuery 1.9中删除,而且应该使用.on()。到目前为止,如果选择器是一个字符串,.on()对我来说是完美的。例如,

$("a.offsite").live("click", function(){ alert("Goodbye!"); });

变成了

$(document).on("click", "a.offsite", function(){ alert("Goodbye!"); });

但是如何将.on()用于JQuery选择器对象(或对象集合),如下所示?

var jele = $('.nav').find("a.offsite");
$(jele).live("click", function(){ alert("Goodbye!"); });

变成了

var jele = $('.nav').find("a.offsite");
$(document).on("click", jele, function(){ alert("Goodbye!"); });

上面的代码是否正确转换?我遇到的问题是绑定到同一事件的其他事件处理程序,但事件触发时也会执行不同的选择器。因此我怀疑这不是正确的方法,但我在官方文档中找不到任何类似的例子。

我知道我可以将选择器字符串而不是jele对象传递给.on()方法但在某些情况下我根本无法访问选择器字符串,例如。当jele对象作为参数传递给发生绑定的函数时。

3 个答案:

答案 0 :(得分:0)

获得JQuery jele对象后,尝试在.on()上调用jele函数:

$(jele).on("click", your-code-here);

其他方法是使选择器字符串为jele。查看this post我发现了有关检索任何JQuery对象的选择器字符串的信息。获得jele选择器字符串后,您的代码应如下所示:

$(document).on("click", selector, your-code-here);

答案 1 :(得分:0)

$(jele).on("click", function(){ alert("Goodbye!"); });

答案 2 :(得分:0)

.on()替换.bind().live().delegate()

用法:

$('div').on('click',function(){/* ... */}); //equivalent to .bind()

这3行是等价的:

$('a','#menu').live('click',function(){/* ... */});
$('#menu').delegate('a','click',function(){/* ... */}); 
$('#menu').on('click','a',function(){/* ... */});