zoukankan      html  css  js  c++  java
  • js addEventListener removeEventListener

    addEventListener,removeEventListener

      • addEventListener()接受三个参数。
        第一个是事件类型,如click,keypress,主意没有on,并且全是小写。
        第二个是处理函数,有一个event参数,event包括type,target等等属性。
        第三个是bool值,不写是false,false为冒泡事件处理函数,true为捕获事件处理函数。
      • removeEventListener()接受三个参数。
        第一个是事件类型,同上。
        第二个是处理函数,必须是注册时同一个函数,传匿名函数没用。如addEventListener的是fun1,removeEventListener也要是fun1
        第三个同上
            var father = document.getElementById("father");
            var fatherHandle = function(event) {
                console.log('--------- father -----------')
            }
            father.addEventListener("click", fatherHandle, false);
            father.removeEventListener("click", fatherHandle, false); //有效
            father.removeEventListener("click", function(){console.log('-- no --')}, false); //无效
      • 能通过多次调用addEventListener为同一个对象注册同一事件类型的多个处理函数,并且按照注册的顺序调用。
        但是使用相同参数多次注册无效,只会注册一次。
      • 在事件处理函数内,this指向事件目标的节点对象
      • 处理函数return false就是阻止默认操作,
        在addEventListener中事件对象的preventDefault()取消默认操作
      • 事件传播三个阶段:
        事件的捕获:由window对象一直到触发的内部对象
        事件处理函数:第三个参数为true为捕获函数,false为冒泡处理函数
        事件的冒泡:由最里面的对象向外扩散一直到根节点。
        调用事件对象的stopPropagation()方法阻止事件冒泡。如果在同一对象上注册了其他函数,会继续调用,但其他对象上就不会再执行。
        stopImmediatePropagation()阻止其他对象的传播也阻止了同一个对象的其他函数执行。

     

        var father = document.getElementById("father");
        var child = document.getElementById("child");
        var fatherHandle = function(event) {
            console.log('--------- father -----------')
        }
        var childHandle = function(event) {
            console.log('--------- child -----------')
        }
    
        father.addEventListener("click", fatherHandle, true);
        child.addEventListener("click", childHandle, true);
        // father - child
        father.addEventListener("click", fatherHandle, false);
        child.addEventListener("click", childHandle, false);
        // child - father
    
    
        var fatherHandle = function(event) {
            console.log('--------- father -----------')
        }
        var childHandle = function(event) {
            console.log('--------- child -----------')
            event.stopPropagation()
        }

        father.addEventListener("click", fatherHandle, false);
        child.addEventListener("click", childHandle, false);
        child.addEventListener("click", function(e){console.log('haha')}, false);
        // child haha
    
    

     

     

    调用顺序

      • 设置对象属性或html属性得注册函数优先调用
      • addEventListener按注册的顺序调用
      • IE 的attachEvent()不按顺序调用,所以代码不应该以来调用顺序
    <body>
        <h1 id="father">
            father
            <span id="child" onclick="fun()">child</span>
        </h1>
    <script>
        var child = document.getElementById("child");
        var childHandle = function(event) {
            console.log('--------- child -----------')
        }
        child.addEventListener("click", childHandle, false);
        var fun = function(e) {
            console.log('--------- property -----------')
        }
        // property - child
    </script>
    </body>
  • 相关阅读:
    JSTL 标签库
    C++(一)— stringstream的用法
    深度学习—反向传播的理解
    深度学习—线性分类器理解
    Python—numpy.bincount()
    Python—numpy.argsort()
    Python—numpy.flatnonzero()
    C++(零)— 提高程序运行效率
    机器学习(八)—GBDT 与 XGBOOST
    机器学习(七)—Adaboost 和 梯度提升树GBDT
  • 原文地址:https://www.cnblogs.com/wayshon/p/7367951.html
Copyright © 2011-2022 走看看