on()vs live()单击尚不存在的元素上的函数

时间:2013-02-26 15:12:36

标签: jquery onclick onclicklistener

据我所知,click()方法对我不起作用,因为我点击的元素在页面加载(DOM ready)上不存在。

我发现许多答案建议使用.live('click',function(){...})。这很棒!

但是,从{jQuery 1.7

开始,.live()已弃用

所以,我尝试使用.on('click',function(){...}),但它不起作用(与.click()的行为相同。

有没有人知道为什么,或者我可以做什么来.on()使用.live()(哪个有效)?

2 个答案:

答案 0 :(得分:21)

由于on()替换了bind()live(),您需要传递第三个参数才能使用事件委派(换句话说,让它像旧的一样工作live()):

$('#container').on('click', '.element', function(){ });

答案 1 :(得分:7)

你应该可以使用这样的格式:

$(document).on('click','element', function(){...});

其中element是要将click事件绑定到的元素。使用document是一种最糟糕的情况,因为理想情况下,您希望使用DOM加载时存在的元素,该元素在DOM层次结构中更接近于将动态加载的元素。

来自jQuery .on()文档:

  

事件处理程序仅绑定到当前选定的元素;他们   在您的代码调用.on()时页面上必须存在。   要确保元素存在且可以选择,请执行事件   绑定在文档就绪处理程序中的元素   页面上的HTML标记。如果将新HTML注入页面,   选择元素并在新HTML之后附加事件处理程序   放入页面。