• js事件监听器用法实例详解


    本文实例讲述了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);

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

    /*
     * 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>

     

  • 相关阅读:
    【每天都要看一下】
    【这里有别人的经验,也有好玩的发现】
    【WPF】Listbox模板内button点击选中当前listboxItem
    【WFP】弹出窗口不在win10 任务列表里显示的方法
    PSD路径转换为 WPF path 的data
    【WPF】Listbox内item的样式替换默认选中样式和鼠标滑过样式
    【WPF】ListBox1内嵌套ListBox2 2的滑轮滚动阻止1的滚动解决方法
    【C#】文本框拼音检索汉字
    【WPF】Datagrid显示最低下一跳
    【C#】绝对随机数
  • 原文地址:https://www.cnblogs.com/ranyonsue/p/6692454.html
Copyright © 2020-2023  润新知