zoukankan      html  css  js  c++  java
  • js事件监听器用法实例详解

    这篇文章主要介绍了js事件监听器用法,以实例形式较为详细的分析了javascript事件监听器使用注意事项与相关技巧,需要的朋友可以参考下
    本文实例讲述了js事件监听器用法。分享给大家供大家参考。具体分析如下:


    1、当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆盖掉,也就是说,在对象的onclick事件发生时,只会执行最后绑定的方法。而用事件监听则不会有覆盖的现象,每个绑定的事件都会被执行。如下:

    window.onload = function(){
      var btn = document.getElementById("yuanEvent");
      btn.onclick = function(){
        alert("第一个事件");
      }
      btn.onclick = function(){
        alert("第二个事件");
      }
      btn.onclick = function(){
        alert("第三个事件");
      }
    }

    最后只输出:第三个事件,因为后一个方法都把前一个方法覆盖掉了。



    原生态的事件绑定函数addEventListener:

    var eventOne = function(){
      alert("第一个监听事件");
    }
    function eventTwo(){
      alert("第二个监听事件");
    }
    window.onload = function(){
      var btn = document.getElementById("yuanEvent");
      //addEventListener:绑定函数
      btn.addEventListener("click",eventOne);
      btn.addEventListener("click",eventTwo);
    }

    输出:第一个监听事件 和 第二个监听事件


    2、采用事件监听给对象绑定方法后,可以解除相应的绑定,写法如下:

    var eventOne = function(){
      alert("第一个监听事件");
    }
    function eventTwo(){
      alert("第二个监听事件");
    }
    window.onload = function(){
      var btn = document.getElementById("yuanEvent");
      btn.addEventListener("click",eventOne);
      btn.addEventListener("click",eventTwo);
      btn.removeEventListener("click",eventOne);
    }

    输出:第二个监听事件



    3、解除绑定事件的时候一定要用函数的句柄,把整个函数写上是无法解除绑定的。
    错误写法:

    btn.addEventListener("click",function(){
      alert(11);
    });
    btn.removeEventListener("click",function(){
      alert(11);
    });

    正确写法:

    btn.addEventListener("click",eventTwo);
    btn.removeEventListener("click",eventOne);



    总结:对函数进行封装后的监听事件如下,兼容各大主流浏览器。

    /*
     * addEventListener:监听Dom元素的事件
     * 
     * target:监听对象
     * type:监听函数类型,如click,mouseover
     * func:监听函数
     */
    function addEventHandler(target,type,func){
      if(target.addEventListener){
        //监听IE9,谷歌和火狐
        target.addEventListener(type, func, false);
      }else if(target.attachEvent){
        target.attachEvent("on" + type, func);
      }else{
        target["on" + type] = func;
      } 
    }
    /*
     * removeEventHandler:移除Dom元素的事件
     * 
     * target:监听对象
     * type:监听函数类型,如click,mouseover
     * func:监听函数
     */

    function removeEventHandler(target, type, func) {
      if (target.removeEventListener){
        //监听IE9,谷歌和火狐
        target.removeEventListener(type, func, false);
      } else if (target.detachEvent){
        target.detachEvent("on" + type, func);
      }else {
        delete target["on" + type];
      }
    }
    var eventOne = function(){
      alert("第一个监听事件");
    }
    function eventTwo(){
      alert("第二个监听事件");
    }
    window.onload = function(){
      var bindEventBtn = document.getElementById("bindEvent");
      //监听eventOne事件
      addEventHandler(bindEventBtn,"click",eventOne);
      //监听eventTwo事件
      addEventHandler(bindEventBtn,"click",eventTwo );
      //监听本身的事件
      addEventHandler(bindEventBtn,"click",function(){
        alert("第三个监听事件");
      });
      //取消第一个监听事件
      removeEventHandler(bindEventBtn,"click",eventOne);
      //取消第二个监听事件
      removeEventHandler(bindEventBtn,"click",eventTwo);
    }


    实例:

    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Event</title>
        <script type="text/javascript">
          function addEventHandler(target,type,func){
            if(target.addEventListener){
              //监听IE9,谷歌和火狐
              target.addEventListener(type, func, false);
            }else if(target.attachEvent){
              target.attachEvent("on" + type, func);
            }else{
              target["on" + type] = func;
            } 
          }
          function removeEventHandler(target, type, func) {
            if (target.removeEventListener){
              //监听IE9,谷歌和火狐
              target.removeEventListener(type, func, false);
            } else if (target.detachEvent){
              target.detachEvent("on" + type, func);
            }else {
              delete target["on" + type];
            }
          }
          var eventOne = function(){
            alert("第一个监听事件");
          }
          function eventTwo(){
            alert("第二个监听事件");
          }
          window.onload = function(){
            var bindEventBtn = document.getElementById("bindEvent");
            //监听eventOne事件
            addEventHandler(bindEventBtn,"click",eventOne);
            //监听eventTwo事件
            addEventHandler(bindEventBtn,"click",eventTwo );
            //监听本身的事件
            addEventHandler(bindEventBtn,"click",function(){
              alert("第三个监听事件");
            });
            //取消第一个监听事件
            removeEventHandler(bindEventBtn,"click",eventOne);
            //取消第二个监听事件
            removeEventHandler(bindEventBtn,"click",eventTwo);
          }
        </script>
      </head>
      <body>
        <input type="button" value="测试" id="bindEvent">
        <input type="button" value="测试2" id="yuanEvent">
      </body>
    </html>


    转自:http://www.jb51.net/article/67051.htm

  • 相关阅读:
    七月随想
    曾经的诗
    Foundry feats. MultiverseStudio
    "BLAME" is out.
    去除partner页面消息 自动添加关注者的功能
    Odoo小数精度及货币精度详解
    CentOs 6.x 升级 Python 版本【转】
    django template if return false
    Odoo “坑” 系列之 XML中的布尔类型
    Qweb报表中的Reload from Attachment参数
  • 原文地址:https://www.cnblogs.com/zhn0823/p/5821505.html
Copyright © 2011-2022 走看看