jQuery使用绑定与点击

我遇到了几个方法来处理jQuery中的点击事件:

绑定:

$('#mydiv').bind('click', function() { ... }); 

点击:

 $('#mydiv').click(function() { ... } 

上:

 $('mydiv').on('click', function() { ... } 

两个问题:

  1. 他们还有其他的方式吗?
  2. 我应该使用哪一个,为什么?

更新:

正如艾韦龙所build议的,我应该更好地阅读文档,并发现我应该使用:

on()或click(),

这实际上是一回事。

但是,没有人解释为什么绑定不再被推荐? 我可能会得到更多的缺点,因为在某些地方显而易见,但是在文档中我找不到这个原因。

UPDATE2:

'on'具有能够将事件处理程序添加到dynamic创build的元素的有用效果。 例如

 $('body').on('click',".myclass",function() { alert("Clicked On MyClass element"); }); 

这段代码将一个单击处理程序添加到具有“myClass”类的元素。 但是,如果更多的myClass元素随后被dynamic添加,它们也会自动获得点击处理程序,而不必显式调用“on”。 根据我所理解的人们所说的,这也是更有效率的(参见下面的Simons回答)。

bind的文档中click

绑定 :

从jQuery 1.7开始,.on()方法是将事件处理程序附加到文档的首选方法。

源代码清楚地说明没有理由使用bind ,因为这个函数只是调用更灵活on函数而不是更短:

 bind: function( types, data, fn ) { return this.on( types, null, data, fn ); }, 

所以我build议,就像jQuery团队一样,忘记旧的bind函数,这个函数现在是无用的。 这只是为了与旧代码兼容,它仍然在这里。

点击 :

这个方法是.on('click',handler)的一个快捷方式。

这个快捷方式当然不像on函数那么强大和灵活,并且不允许委托,但是它可以让你在应用时编写更短,更可读的代码。 在这一点上,意见分歧:有些开发者认为应该避免,因为它只是一个捷径,而且还有一个事实,就是你只要使用授权就需要用它代替,所以为什么不直接使用更多一致?

对于你的第一个问题:还有.delegate ,从jQuery 1.7开始取代.on ,但仍然是绑定事件处理程序的有效forms。

对于第二个问题:您应该总是像使用.on一样使用.on ,但是您应该注意如何使用.on ,因为您可以绑定对象本身或更高级别的元素上的事件处理程序,并将其委派与.delegate

假设你有一个ul > li列表,并且想要将一个mouseover事件绑定到这个li 。 现在有两种方法:

  • $('ul li').on('mouseover', function() {});
  • $('ul').on('mouseover', 'li', function() {});

第二个是可取的,因为有了这个事件处理程序绑定到ul元素一次,jQuery将通过event.currentTarget ( jQuery API )获得实际的目标项目,而在第一个例子中,你将它绑定到每个列表元素。 此解决scheme也适用于在运行时添加到DOM的列表项。

这不仅适用于parent > child元素。 如果你有一个页面上的每个锚的点击处理程序,你应该使用$(document.body).on('click', 'a', function() {}); 而不仅仅是$('a').on('click', function() {}); 节省大量的时间将事件处理程序附加到每个元素。

我认为你应该在发布这个问题之前search了jquery文档 :

从jQuery 1.7开始,.on()方法是将事件处理程序附加到文档的首选方法。