Jquery正在将.live更改为.on,

Jquery正在将.live更改为.on,,jquery,Jquery,我正在尝试将我所有的.live()更改为.on(),因为之前的版本现在已被弃用 但我很难理解它是如何工作的。在我使用这个代码之前,它工作得很好 $('#lightBoxClose').live('click', function() { $('#lightBox').fadeOut(); }); 所以我试着把它改成 $('#lightBoxClose').on('click', function() { $('#lightBox').fadeOut(); }); 但是它不起作

我正在尝试将我所有的
.live()
更改为
.on()
,因为之前的版本现在已被弃用

但我很难理解它是如何工作的。在我使用这个代码之前,它工作得很好

$('#lightBoxClose').live('click', function() {
    $('#lightBox').fadeOut();
});
所以我试着把它改成

$('#lightBoxClose').on('click', function() {
    $('#lightBox').fadeOut();
});

但是它不起作用,请任何人解释一下我应该做什么,谢谢。

请在发布前使用搜索,因为到处都是这样发布的

见:


您必须绑定到绑定时已经存在的元素,并将目标选择器作为第二个参数传递。该元素必须是最终单击目标的祖先,因此它可以捕获冒泡事件。这种技术称为委托

例如,使用
文档
元素:

$(document).on('click', '#lightBoxClose', function() {
    $('#lightBox').fadeOut();
});

可能重复:参见本章底部的示例,真的吗?那太令人失望了。为什么默认情况下它不绑定到窗口?@Anthony,因为
.on()
不仅仅取代
.live()
,它现在是绑定所有事件的标准方式。因此,它不能通过假设您总是希望绑定到
文档
来强制委派。(注意:您不能绑定到
窗口
对象,因为DOM事件不会到达它。)@bfavaretto:如果是这种情况,那么像
.click()
这样的绑定速记函数在附加到现有元素后会起作用吗?像
$(文档)。$('.my_controllers')。单击(“blah”)
?a)当每个人都要使用
document
时,如果它对一个特定的面板不是至关重要的,那么就必须提前建立一个父级,b)必须放弃使jquery更容易查看和编写的事件特定的速记方法,这似乎有点过分。似乎它正在远离我所认同的懒惰和软弱的方式。@Anthony,像
.click()
这样的速记方法并没有被弃用,我一直在使用它们。只是
.on()
现在结合了live、bind和delegate的强大功能,所以他们鼓励使用它们。它们可能没有被弃用,但它们(而且从来没有)动态绑定到新元素,随着jquery变得越来越复杂,这方面的需求也越来越高,有两种情况会发生:1)经验较少的开发人员在事件方法不起作用时撞到墙上;2)经验较多的开发人员总是习惯使用
.on()
。不要误解我的意思,最好是将来有一个绑定方法而不是三个,我只希望侦听器列表是一个活动节点列表,而不是订阅模型。
$(document).on('click', '#lightBoxClose', function() {
    $('#lightBox').fadeOut();
});