人心 2019-06-27
当我们试图绑定一些事件到DOM元素上的时候,通常会使用以下的四个方法bind(),on(),live(),delegate()
大家应该用的较多的是前两种方法。下面是我对四种方法的理解:
$( "#members li a" ).bind( "click", function( e ) {} ); $( "#members li a" ).click( function( e ) {} );
上面的两行代码完成的任务都是一样的,就是把event handler 加到全部匹配的a元素上。这里存在着一些效率方面的问题,一方面,我们隠式地吧点击事件加到了所有的a标签上,这个过程是昂贵的;另一方面在执行的时候也是一种浪费,因为他们都是做了同一件事却执行了很多次(我们可以把它们hook到它们的父元素,通过冒泡可以对它们中的每一个进行区分,然后在执行这个event handle)。
优点
缺点
.live()
.live()方法用到了事件委托的概念来处理事件的绑定。它和用.bind()来绑定事件是一样的。.live()方法会绑定相应的事件到你所选择的元素的根元素上,即是document元素上。那么所有通过冒泡上来的事件都可以用这个相同的handler来处理了。它的处理机制是这样的,一旦事件冒泡到document上,jQuery将会查找selector/event metadata,然后决定那个handler应该被调用。不过在最新的jquery版本中好像被删掉了。
$( "#members li a" ).live( "click", function( e ) {} );
优点:
缺点:
.Delegate()
.delegate()有点像.live(),不同于.live()的地方在于,它不会把所有的event全部绑定到document,而是由你决定把它放在哪儿。而和.live()相同的地方在于都是用event delegation.推荐使用.delegate() 代替.live()
$( "#members" ).delegate( "li a", "click", function( e ) {} );
优点:
缺点:
.On()
其实.bind(), .live(), .delegate()都是通过.on()来实现的,.unbind(), .die(), .undelegate(),也是一样的都是通过.off()来实现的,这是1.8.2的源码:
$( "#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...
<table id="table" class="table table-striped table-bordered table-hover table-nowrap" width="100%&qu