zoukankan      html  css  js  c++  java
  • 事件绑定的几种常见方式

    在项目开发中,经常遇到绑定事件不起作用,或者事件绑定多次,导致重复触发。为了应对所遇到的问题,上网查阅了一些资料,对事件绑定做了一些系统研究。
    ##1.事件绑定的几种常见方式(以click事件为例)
      $(selector).click(function(){...})
      $(selector).bind("click",function(){...})
      $(selector).live("click",function(){...})
      $(document).delegate("selector","click",function(){...})
      $(selector).on("click",function(){...})

      虽然有以上四种基本方式绑定,但无论你用哪一种,底层实现都是由on事件绑定完成,唯一的区别就是书写方便和个人习惯而已。

    ###1>bind方法

      会给每一个符合selector的元素添加click执行函数,即:将click事件绑定到所有设置了的selector元素上,如果动态添加了元素,之前绑定事件也起作用

    ###2>live方法

      将事件绑定在document上,所有事件触发冒泡到根节点document的时候,判断是否为click事件、并且是否为selector元素都符合则执行事件函数

    ###3>delegate方法

      原理上delegate方法和live方法很类似,都是传递选择器和执行函数两个参数到document上判断,

      $(document).delegate("selector","click",function(){...}) 约等于$("selector").live("click",function(){...})

      唯一的区别在于delegate的性能会比live稍好一些,因为live方法需要遍历整个dom去查selector而delegate只需要监测document就够了,想要更深入了解可以自己去网上查阅下,例子很多

    ###4>on方法

      on的绑定原理和bind差不多,但是on在性能上占优势。

    ##2.事件重复绑定的可能原因

    ###1>大量使用ajax(这个针对自己写的,你们应该不会遇到)

      本人有一个习惯把同类的东西放在一个大类,所以上次犯了个低级错误。将所有事件写在一个大方法里,如:

      var clickEvent = function(){
        $(a).bind(...);
        $(b).bind(...);
      }

      在大量使用ajax时,为了触发事件会在success里调用clickEvent方法,然后由于其他地方需要触发同样的事件又会调用clickEvent,这样很容易导致多次触发。

      解决方案:正确改正这种习惯

    ###2>嵌套元素的事件冒泡

      相信这个大家已经很熟悉了事件冒泡了,不再多说

      解决方案:e.preventDefault()//阻止默认 e.stoppropagation()//阻止冒泡

    ###3>频繁使用trigger函数

      可能有时候的需求需要触发某个特定事件,这时我们会想当然使用trigger触发事件,但是却没有考虑到带来的隐患。尤其是一个事件去trigger另一个事件

      解决方案:阻止事件冒泡,见2> 或者使用triggerhandler(慎用,不支持chrome貌似)

  • 相关阅读:
    Shell编程进阶 2.2 shell数组
    Shell编程进阶 2.1 shell函数
    win7将 esc与 capslock 互换
    Vimium 快捷键记录
    mysql-server 的一些记录
    2003服务器断开rdp后会自动注销。
    CentOS云服务器数据盘分区和格式化
    autoproxy 规则
    理解MySQL——索引与优化
    Spinnaker简介
  • 原文地址:https://www.cnblogs.com/jyjin/p/4180408.html
Copyright © 2011-2022 走看看