我应该使用.on()还是.click()附加事件处理程序?

问题描述:

假设我只是想附上一个简单的点击处理程序的元素,我一直在做这样的:我应该使用.on()还是.click()附加事件处理程序?

$("#mydiv").click(function() { ... }); 

望着JQuery的文档,似乎.on()是“建议”的方式附加事件处理程序并替换.bind().delegate().live()

在jQuery 1.7中,。对()方法提供用于附接的事件处理程序所需 所有功能。有关从旧jQuery 事件方法转换的帮助,请参阅.bind(),.delegate()和.live()。

而且在.click()它说的文档:

这种方法是在头两个变化对.bind快捷方式( '点击',处理程序),并.trigger('点击')在第三。

因此,这意味着.click()使用.bind()将由.on()被弃用,取而代之,是吧?或者暗示.click()会坚持下去,但它会在某种程度上成为.on("click")的快捷方式?

基本上,我的问题是这样的......当今天从事写作的jQuery代码,我应该使用:

Variant 1: $("#mydiv").click(function() { ... }); 

或:

Variant 2: $("#mydiv").on("click", function() { ... }); 

+0

您不必担心遗留代码,他们不太可能会完全删除点击速记。 .on()处理程序只是附加事件处理程序的一种更有效的方式,从能够同时附加多个事件处理程序到向映射事件添加额外信息! – Khez

就我个人而言,我会使用on()所有来自jQuery 1.7+的事件绑定。

这意味着动态添加的元素与页面加载时可用的元素之间不存在歧义。

而且,你的状态,click()(和其他事件的快捷方式)通过jQuery的反正转化为on("event", function() { ... });,所以它保存在过程中的一步 - 不,这使得课程的显着差异。

最后,on("click")在我看来更好。

+0

该文档声明.click()被转换为.bind()而不是.on()。这就是我困惑的原因。 – njr101

+2

1.7+'click()'被转换为'on()'。我猜他们还没有更新文档。 –

+0

感谢Rory的回答。我查看了JQuery 1.7源代码来确认 - 不是我不信任你;).click()调用事实上已经转换为.bind(),正如文档所说的。但.bind()又转换为.on()。所以是的,你是完全正确的。 – njr101