• 事件监听addEventListener()和removeEventListener() ---------1


    一直想写一个原生事件监听的记录,方便以后看,不愿意写主要是事件监听的单词太长,记起来好难记每次都要查,这次把知道的写完了,来这里查好了,以后要是理解的更透彻了,就再补全好了

    首先,DOM0级事件和DOM2级事件

    给一个元素添加事件有三种方法

    HTML

    <input type="button" value='button1' id='btn1' />
    <input type="button" value='button2' id='btn2' />
    <input type="button" value='button3' id='btn3' onclick="alert('我是btn3')" />

    对于btn3的按钮,事件是直接加到元素标签内的,好像叫html事件,缺点就是没有分离吧

    DOM0级事件

    //添加事件
    var btn1=document.getElementById('btn1');
    btn1.onclick=function(){
        alert('我是btn1')
    }
    //解除事件
    btn1.onclick=null;

    直接取到btn1,给他添加conclick事件,缺点只能添加一个事件,如果再添加,会覆盖第一个事件

    DOM2级事件

    //添加事件 
    var btn2=document.getElementById('btn2');
    function box(){alert('我是btn2');}
    btn2.addEventListener('click',box,false);
    //解除事件
    btn2.removeEventListener('click',box,false);

    添加事件用  addEventListener(什么事件、做什么事、false);      false好像是事件冒泡阶段 对应的 true事件捕获阶段,一般我这种菜鸟用不到true,没试过,反正一律写false

    删除事件用  removeEventListener(什么事件、做什么事、false);

    ps:添加事件和删除事件,必须和添加的时候相同才能移除,不然清不掉。

    好像挺简单,真的要是这样就好了,这个addEventListener和removeEventListener有兼容问题,好像是IE8以下不好使,所以还有另外的单词要记

    attachEvent 和 detachEvent,这个好像是IE专属,

    用法

    //添加事件 
    var btn2=document.getElementById('btn2');
    function box(){alert('我是btn2');}
    btn2.attachEvent('onclick',box);
    //解除事件
    btn2.detachEvent('onclick',box);

    没有第三个参数是因为IE8以前只支持事件冒泡,另外需要记住,这里是onclick,所有的事件都要加on,低级的浏览器事比较多

    好了,要记住这四个单词

    addEventListener、removeEventListener、attachEvent、detachEvent

    ------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------------

     要兼容所有浏览器,就做判断,谁有能力,谁做事

    var btn2=document.getElementById('btn2');
    function box(){alert('我是btn2');}
    var eventUtil={
           // 添加事件
        addHandler:function(element,type,handler){         ////三个参数分别为元素、事件、做什么事(方法)
             if(element.addEventListener){                 //如果支持element.addEventListener方法就用addEventListener
               element.addEventListener(type,handler,false);          
             }else if(element.attachEvent){                //如果支持element.attachEvent方法就用attachEvent
               element.attachEvent('on'+type,handler);    
             }else{
               element['on'+type]=handler;                 //如果都不支持,那就用DOM0级的方法
             }
        },
        // 删除事件                                        //同上
           removeHandler:function(element,type,handler){
             if(element.removeEventListener){
               element.removeEventListener(type,handler,false);
             }else if(element.detachEvent){
                     element.detachEvent('on'+type,handler);
             }else{
               element['on'+type]=null;
             }
        }
    }
    eventUtil.addHandler(btn2,'click',box);
    eventUtil.removeHandler(btn2,'click',box);

    封装了一个方法,以后可以直接拿过来用

  • 相关阅读:
    sessionStorage 、localStorage 和 cookie 之间的区别 及共同点:
    [转]css文件和js文件后面带一个问号
    Asp.net中动态设置标题Title,Keyword,Descripton标签的方法
    【11.7校内测试】【倒计时3天】【不想写题解】
    【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】
    【11.6校内测试】【倒计时4天】【找规律?思维】【二分+倍增】
    【洛谷】3960:列队【Splay】
    CF733F Drivers Dissatisfaction【链剖】【最小生成树应用】
    【11.5校内测试】【倒计时5天】【DP】【二分+贪心check】【推式子化简+线段树】
    【11.2晚校内测试】【装桶模拟】【单调栈】
  • 原文地址:https://www.cnblogs.com/change-oneself/p/4801687.html
Copyright © 2020-2023  润新知