当咱们试图绑定一些事件到DOM元素上的时候,一般会使用如下的四个方法bind(),on(),live(),delegate()
你们应该用的较多的是前两种方法。下面是我对四种方法的理解:html
$( "#members li a" ).bind( "click", function( e ) {} ); $( "#members li a" ).click( function( e ) {} );
上面的两行代码完成的任务都是同样的,就是把event handler 加到所有匹配的a元素上。这里存在着一些效率方面的问题,一方面,咱们隠式地吧点击事件加到了全部的a标签上,这个过程是昂贵的;另外一方面在执行的时候也是一种浪费,由于他们都是作了同一件事却执行了不少次(咱们能够把它们hook到它们的父元素,经过冒泡能够对它们中的每个进行区分,而后在执行这个event handle)。
优势jquery
缺点浏览器
.live()
.live()方法用到了事件委托的概念来处理事件的绑定。它和用.bind()来绑定事件是同样的。.live()方法会绑定相应的事件到你所选择的元素的根元素上,便是document元素上。那么全部经过冒泡上来的事件均可以用这个相同的handler来处理了。它的处理机制是这样的,一旦事件冒泡到document上,jQuery将会查找selector/event metadata,而后决定那个handler应该被调用。不过在最新的jquery版本中好像被删掉了。函数
$( "#members li a" ).live( "click", function( e ) {} );
优势:code
缺点:orm
.Delegate()
.delegate()有点像.live(),不一样于.live()的地方在于,它不会把全部的event所有绑定到document,而是由你决定把它放在哪儿。而和.live()相同的地方在于都是用event delegation.推荐使用.delegate() 代替.live()htm
$( "#members" ).delegate( "li a", "click", function( e ) {} );
优势:blog
缺点:事件
.On()
其实.bind(), .live(), .delegate()都是经过.on()来实现的,.unbind(), .die(), .undelegate(),也是同样的都是经过.off()来实现的,这是1.8.2的源码:get
$( "#members li a" ).on( "click", function( e ) {} ); $( "#members li a" ).bind( "click", function( e ) {} ); // Live $( document ).on( "click", "#members li a", function( e ) {} ); $( "#members li a" ).live( "click", function( e ) {} ); // Delegate $( "#members" ).on( "click", "li a", function( e ) {} ); $( "#members" ).delegate( "li a", "click", function( e ) {} );
优势:
缺点:
结论:
参考资料:https://www.cnblogs.com/moonr...
http://www.alfajango.com/blog...