• 夺命雷公狗---javascript NO:10 解决事件监听兼容性问题和移除事件


    思路:通过JavaScript代码判断当前用户所使用的浏览器(IE、W3C)

    ① 创建public.js核心公用js库

    ② 创建事件监听函数addEvent()

    ③ 创建代码如下:

    function $(id){
    return document.getElementById(id);
    }

        //解决事件监听兼容性问题(判断浏览器类型)
        function addEvent(obj,type,callback){
            if(obj.addEventListener){
                obj.addEventListener(type,callback);
            }else{
                obj.attachEvent(‘on’+type,callback);
            }
    }

    ④ 在html页面中调用addEvent方法实现事件监听

    1)载入public.js文件和定义事件监听按钮

    示例:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    <script src=”./public.js”></script>
    </head>
    <body>
    <input type=”button” id=”btnok” value=”点击”>
    </body>
    </html>

    为btnok按钮绑定事件监听程序

    示例:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    <script src=”./public.js”></script>
    <script>
    window.onload = function(){
    addEvent($(‘btnok’),’click’,function(){
    alert(‘hello’);
    })
    addEvent($(‘btnok’),’click’,function(){
    alert(‘world’);
    })
    }
    </script>
    </head>
    <body>
    <input type=”button” id=”btnok” value=”点击”>
    </body>
    </html>

    运行结果:在IE与W3C中都可以正常弹出hello与world

    事件监听的移除

    在有些情况下,我们可能需要移除某个对象的某个事件,那么我们可以采用移除事件监听的方式,代码如下:

    IE模型下:

    attachEvent :添加

    detachEvent(type,callback); :移除

    参数说明:

    type:带on前缀的事件类型

    callback:要移除的事件处理程序

    W3C模型下:

    addEventListener :添加

    removeEventListener(type,callback);

    参数说明:

    type:不带on前缀的事件类型

    callback:要移除的事件处理程序

    注:如果想进行移除相关事件监听程序,那么在添加事件监听时必须为事件处理程序命名。

    示例代码:

    IE模型浏览器

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    <script src=”./public.js”></script>
    <script>
    function fun1(){
    alert(‘hello’);
    }
    function fun2(){
    alert(‘world’);
    }
    window.onload = function(){
    //绑定事件监听
    addEvent($(‘btnok’),’click’,fun1);
    //在次绑定事件监听
    addEvent($(‘btnok’),’click’,fun2);
    //移除事件
    $(‘btndel’).onclick = function(){
    //IE模型
    $(‘btnok’).detachEvent(‘onclick’,fun1);
    }
    }
    </script>
    </head>
    <body>
    <input type=”button” id=”btnok” value=”点击” />
    <input type=’button’ id=”btndel” value=”移除” />
    </body>
    </html>
     

    W3C模型浏览器

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    <script src=”./public.js”></script>
    <script>
    function fun1(){
    alert(‘hello’);
    }
    function fun2(){
    alert(‘world’);
    }
    window.onload = function(){
    //绑定事件监听
    addEvent($(‘btnok’),’click’,fun1);
    //在次绑定事件监听
    addEvent($(‘btnok’),’click’,fun2);
    //移除事件
    $(‘btndel’).onclick = function(){
    //IE模型
    $(‘btnok’).removeEventListener(‘click’,fun1);
    }
    }
    </script>
    </head>
    <body>
    <input type=”button” id=”btnok” value=”点击” />
    <input type=’button’ id=”btndel” value=”移除” />
    </body>
    </html>

    解决移除事件监听兼容性问题

    ① 在public.js公用函数库中定义removeEvent方法

    ② 定义一下函数

    示例:

    function removeEvent(obj,type,callback){
        if(obj.removeEventListener){
            obj.removeEventListener(type,callback);
        }else{
            obj.detachEvent(‘on’+type,callback);
        }
    }

    创建点击与移除按钮

    <body>
    <input type=”button” id=”btnok” value=”点击” />
    <input type=’button’ id=”btndel” value=”移除” />
    </body>

    为按钮添加事件监听(要求有名字),和调用移除事件监听方法

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=’utf-8′>
    <title></title>
    <script src=”./public.js”></script>
    <script>
    function fun1(){
    alert(‘hello’);
    }
    function fun2(){
    alert(‘world’);
    }
    window.onload = function(){
    //绑定事件监听
    addEvent($(‘btnok’),’click’,fun1);
    //在次绑定事件监听
    addEvent($(‘btnok’),’click’,fun2);
    //移除事件
    $(‘btndel’).onclick = function(){
    removeEvent($(‘btnok’),’click’,fun1);
    }
    }
    </script>
    </head>
    <body>
    <input type=”button” id=”btnok” value=”点击” />
    <input type=’button’ id=”btndel” value=”移除” />
    </body>
    </html>
  • 相关阅读:
    React父组件调用子组件
    ES6数组操作
    ant design mobile入坑记
    vue
    图片上传七牛
    CSS
    CSS矩形、三角形等
    使用POST下载文件
    http https协议
    前端网络必备知识
  • 原文地址:https://www.cnblogs.com/leigood/p/5031858.html
Copyright © 2020-2023  润新知