• JavaScript 事件处理详解


    事件绑定与解绑:

    el.onEventName = function (){}   

    document.getElementById("dom").onclick = function(){  } //绑定事件
    document.getElementById("dom").onclick = null;          //移除绑定  

    dom0级事件,也就是最早期js处理事件的方式。事件绑定写法比较简单,但是有个致命的缺点,只能给一个元素的某一个行为绑定一次方法,第二次绑定的会把前面的覆盖掉。

    document.getElementById("dom").onclick = function(){
         console.log("click");    //无法输出
    }
    document.getElementById("dom").onmouseover = function(){
        console.log("mouseover");  //可以输出
    }

    如上,触发 onclick 这个事件将不会任何反馈;

    事件监听与移除监听:

    el.addEventListener("EventName",function(){},false);   注:第一个参数:事件名;第二个参数:事件回调,第三个参数:表示是在事件捕获(true)或事件冒泡阶段(false) 触发,默认false

    dom2级事件,js规范更新后,提出的另一种事件处理方案,通过addEventListener方法去监听某个元素上的事件是否被触发,解决了多次绑定被覆盖的问题

    document.getElementById("dom").addEventListener("click",function(){
        console.log("click1");  //输出
    });
    document.getElementById("dom").addEventListener("click",function(){
        console.log("click2");  //输出
    });

    removeEventListener 移除监听 ,注意,如果addEventListener 第二个参数是匿名函数, removeEventListener无法移除,如下

    错误示范:

    document.getElementById("dom").addEventListener("click",function(){});
    document.getElementById("dom").removeEventListener("click",function(){})

    正确示范:

    function eventcallback(){
    
    }
    document.getElementById("dom").addEventListener("click",eventcallback);
    document.getElementById("dom").removeEventListener("click",eventcallback);

    缺点:IE9以下addEventListener /removeEventListener不兼容 

    既来之,则安之!

    IE6~8 用 attachEvent/detachEvent   

    el.attrachEvent("onEventName",function(){  });     如:
    el.attachEvent('onclick',function(){{});
    detachEvent 移除事件 同removeEventListener 一样,无法移除 带匿名函数的事件
    正确示范:
    function eventcallback(){
    
    }
    document.getElementById("dom").attachEvent("onclick",eventcallback);
    document.getElementById("dom").detachEvent("onclick",eventcallback);

    如何去兼容所有浏览器:
    function addEvent(el, eventName, fn, useCapture) 
    {
        if (el.addEventListener) 
        {
            // Dom2
            el.addEventListener(eventName, fn, useCapture);
            return true;
        }
        else if (el.attachEvent) 
        {
            // IE6~8
            var r = el.attachEvent('on' + eventName, fn);
            return r;
        }
        else 
        {
           // Dom0
            el['on' + eventName] = fn;
        }
    }

    (php开发,web前端,ui设计,vr开发专业培训机构,v客学院版权所有,转载请注明出路,谢谢!!!)

  • 相关阅读:
    oracle的增删改查语句
    Oracle Rac11g 学习笔记
    怎么个下载别人网站上的字体icon图标fonts文件
    APICloud Studio 3和Apploader真机同步,同一个wifi却一直提示连接不到
    c#发qq邮箱,QQ邮箱当中开启“POP3/SMTP服务”获取授权码
    微信支付异步回调不返回xml,微信会重复多次异步通知
    阿里云C磁盘拓容,IIS日志记录开启关闭
    jsapi微信支付
    c#.Net手机网站对接支付宝接口对接全流程说明
    无法找到列 7 程序遍历超过Excel列数
  • 原文地址:https://www.cnblogs.com/gaomingchao/p/9714758.html
Copyright © 2020-2023  润新知