.live()vs .on()方法

时间:2012-02-09 16:59:11

标签: jquery click live

我正在开发一个项目,当我按住min / plus按钮而不使用.live()方法悬停图片时,该功能正常工作。在.on()方法的情况下,该函数不起作用。

如何解决此问题,因此它也适用于.on()方法?

以下是我所指的an example(我修复了此示例中的错误,但我使用的是.on方法错误。)

2 个答案:

答案 0 :(得分:31)

您没有正确使用它。 .live()的替换为$(document).on(),事件和处理程序被传入,当然......例如:

$(document).on('click', '#myElement', function() { 
  //... some function ...
});

值得一提的是,在.on()出现之前,.live()已经被认为是处理这种绑定的低效方式。建议使用.delegate(),现在.on()(使用委托人语法)。

或者作为示例:代替将文档作为监听器(这是.live()曾经做过的事情),您应该选择最近的祖先,这些祖先不会被DOM操作破坏。老实说,我发现“jsdo.it”使用起来有点笨拙,所以我没有考虑具体的因素,但是,例如,考虑到结构:

<div id="ajax_container">
 <button id="do_something">Clicky!</button>
 <p>Some dynamically-loaded content</p>
</div>

如果ajax_container的内容被Ajax调用替换(不需要显示该部分的代码),则为该按钮的click事件绑定未破坏的侦听器(容器div)将如下所示:

$('#ajax_container').on('click', '#do_something', function() {
 // do something
})

答案 1 :(得分:0)

您必须发布一些代码以确定您的实现无法正常工作,但您应该查看jQuery源代码以获取如何使用.on()和.live()的示例

<div id="parent">
 <a href="#" id="anchor">Click Me</a>
</div>

$('#anchor').live('click',function() { }):
$('#parent').on('click','#anchor',function() { });
$('#anchor').on('click',function() { });

将.live()事件侦听器添加到document元素中,以便只要事件一直冒泡到文档元素就会触发回调

在第二个例子中($('#parent')。on()),事件监听器被添加到父元素,每次点击事件冒泡到#parent并且来自(或与之交互)时都会触发一路上)一个名为#anchor

的元素

第三个例子($('#anchor')。on())将事件监听器直接添加到锚元素本身,与$('#anchor')完全相同.bind('click',function (){});

引入.live()的原因是,如果您的页面结构发生更改,仍然可以触发事件回调,因为事件侦听器本身已附加到文档元素。

您可以在类似的方法中使用on,但必须将其自身附加到未从页面中删除的元素 - 如果该元素被删除,那么所有事件侦听器都将被删除。

http://api.jquery.com/on/ http://api.jquery.com/live/