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

    在项目开发中,经常遇到绑定事件不起作用,或者事件绑定多次,导致重复触发。

    1.事件绑定的几种常见方式(以click事件为例)

    jquery:

      $(selector).click(function(){...})

      $(selector).bind("click",function(){...})

      $(selector).live("click",function(){...})

      $(document).delegate("selector","click",function(){...})

    $(selector).on("click",function(){...})

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

      bind方法

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

      live方法

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

      delegate方法

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

    $(document).delegate("selector","click",function(){...})

      约等于

    $("selector").live("click",function(){...})

    [注意:live事件,jQuery 1.7以后版本使用on代替live,且移动设备safari浏览器不支持live事件]

    【穿插解决方案:

    移动设备safari浏览器不支持live事件

    方法一:

    首先要给绑定click事件的元素加上样式:cursor: pointer;

    然后再用live绑定事件

    $('selector').live('click', function() {alert('你点我了'); })    

    如果方法一对你无效,你也可以用

    方法二:

    同样也给绑定click事件的元素加上样式:cursor: pointer;

    然后用on来绑定事件,jquery1.7后推荐用on来动态绑定事件,因为比live更高效

    $(document).on('click', 'selector', function() {
                alert('你点我了');        
    });    

    】  

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

      on方法

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

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

      大量使用ajax

      将所有事件写在一个大方法里,如:

      var clickEvent = function(){

        $(a).bind(...);

        $(b).bind(...);

      }

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

      解决方案:避免这样使用

       嵌套元素的事件冒泡

      解决方案:

      e.preventDefault()//阻止默认

          e.stoppropagation()//阻止冒泡

       频繁使用trigger函数

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

    解决方案:阻止事件冒泡,见上,

      或者使用triggerhandler(慎用,不支持chrome貌似)

    Javascript事件绑定的几种方式

    buttonClick事件为例:

    <button id="btn">click me</button>
    
    function clickBtn() {
    
        alert('click!');
    
    }

    1、直接在元素上绑定回调函数 <button id="btn" onclick="clickBtn()">click me</button>

    2JS获取DOM元素对象后,对onclick属性赋值,绑定事件:        document.getElementById('btn').onclick=clickBtn;

    3JS获取DOM对象后,调用对象的addEventListener函数绑定事件:document.getElementById('btn').addEventListener('click',clickBtn);

    现阶段主流浏览器兼容的绑定事件方式就这3

  • 相关阅读:
    对实时的视屏流进行处理
    opencv读取并播放avi视屏
    opencv中读取显示图像
    为什么既要有IP地址还要有MAC地址
    继承中构造、析构 与 拷贝构造、赋值中的调用区别
    拷贝构造函数和赋值符函数——转
    inline修饰虚函数的问题
    菱形继承产生的问题及解决
    迭代器模式
    备忘录模式
  • 原文地址:https://www.cnblogs.com/beileixinqing/p/6503660.html
Copyright © 2011-2022 走看看