绑定live bind click

Jquery中绑定事件有三种方法:以click事件为例jquery

   (1)target.click(function(){});web

   (2)target.bind("click",function(){});app

   (3)target.live("click",function(){});框架

第一种方法很好理解,其实就和普通JS的用法差很少,只是少了一个on而已函数

第2、三种方法都是绑定事件,可是两者又有很大的不一样,下面着重讲解一下,由于这个若是用到Jquery的框架的话是用的挺多的,尤为要注意两者的区别。测试

【bind和live的区别】spa

       live方法实际上是bind方法的变种,其基本功能就同bind方法的功能是同样的,都是为一个元素绑定某个事件,可是bind方法只能给当前存在的元素绑定事件,对于过后采用JS等方式新生成的元素无效,而live方法则正好弥补了bind方法的这个缺陷,它能够对后生成的元素也能够绑定相应的事件。那么live方法的这个特性是怎么实现的呢?下面来探讨一下其实现原理。orm

      live方法之因此能对后生成的元素也绑定相应的事件的缘由归结在“事件委托”上面,所谓“事件委托”就是指绑定在祖先元素上的事件能够在其后代元素上进行使用。live方法的处理机制就是把事件绑定在DOM树的根节点上,而不是直接绑定在某个元素上。举一个例子来讲明:对象

              $(".clickMe").live("click",fn);seo

             $("body").append("<div class='clickMe'>测试live方法的步骤</div>");

    当咱们点击这个新增的元素时会依次发生以下步骤:

      (1)生成一个click事件,传递给div来作处理

      (2)因为没有事件直接绑定在div上,因此事件直接冒泡到DOM树上

      (3)事件不断冒泡,直到DOM树的根节点上,默认状况下,根节点上就绑定了这个click事件

      (4)执行由live绑定的click事件

      (5)检测绑定事件的对象是否存在,判断是否须要继续执行绑定的事件。检测事件对象是经过检测 

              $(event.target).closest('.clickMe') 可否找到匹配的元素来实现的。

     (6)经过(5)的测试,若是绑定事件的对象存在的话,就执行绑定的事件。

      因为只有在事件发生的时候,live方法才会去检测绑定事件的对象是否存在,因此live方法能够实现后来新增的元素也可实现事件的绑定。相比之下,bind会在事件在绑定阶段就会判断绑定事件的元素是否存在,并且只针对当前元素进行绑定,而不是绑定到父节点上。

根据上面的分析,live的好处真是很大,那么为何还要使用bind方法呢?之因此jquery要保留bind方法而不是采用live方法去替代bind,也是由于live在某些状况下是不可以彻底替代bind的。主要的不一样以下:

     (1)bind方法能够绑定任何JavaScript的事件,而live方法在jQuery1.3的时候只支持click, dblclick, keydown, keypress,

               keyup,mousedown, mousemove, mouseout, mouseover, 和 mouseup.在jQuery 1.4.1中,甚至也支持 focus 和 blue

               事件了(映射到更合适,而且能够冒泡的focusin和focusout上)。另外,在jQuery 1.4.1中,也能支持hover(映射

              到"mouseenter mouseleave")。

    (2)live() 并不彻底支持经过DOM遍历的方法找到的元素。取而代之的是,应当老是在一个选择器后面直接使用 .live()

              方法。

    (3)当一个元素采用live方法进行事件的绑定的时候,若是想阻止事件的传递或冒泡,就要在函数中return false,仅仅调

              用stopPropagation()是没法实现阻止事件的传递或者冒泡的

相关文章
相关标签/搜索