jQuery使用绑定与点击
我遇到了几个方法来处理jQuery中的点击事件:
绑定:
$('#mydiv').bind('click', function() { ... });
点击:
$('#mydiv').click(function() { ... }
上:
$('mydiv').on('click', function() { ... }
两个问题:
- 他们还有其他的方式吗?
- 我应该使用哪一个,为什么?
更新:
正如艾韦龙所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()方法是将事件处理程序附加到文档的首选方法。