Web

JS操作html元素中的事件

2019-08-01  本文已影响32人  追逐_chase
web.jpeg
事件在日常使用到事件,比如:按钮的点击,鼠标的点击等,那么如何给一个元素绑定事件呢,事件的绑定有几个方式呢?

绑定事件的方式一

  <style>
        div{
            width: 200px;
            height: 200px;
            background-color: purple;
        }
    </style>
</head>
<body>
    <div id="dv"></div>
</body>

<script>
    //为元素绑定事件
  var dvObjc = document.getElementById("dv");

  dvObjc.onclick = function(){
       console.log("添加注册事件");
  }

  dvObjc.onclick = function(){
       console.log("111");
  }
</script>

绑定事件的方式二
<script>
  var dvObjc = document.getElementById("dv");
  dvObjc.addEventListener("click",function(){
      console.log("添加注册事件1");
      
  },false);
  dvObjc.addEventListener("click",function(){
      console.log("添加注册事件2");
      
  },false);
  dvObjc.addEventListener("click",function(){
      console.log("添加注册事件3");
      
  },false);

</script>

上面的事件之间,各自实行,相互之间没有冲突

//为任意的一个元素,绑定任意的一个事件
    function addEventListener(element,type,fn) {
      if(element.addEventListener){
        element.addEventListener(type,fn,false);
      }else if(element.attachEvent){
        element.attachEvent("on"+type,fn);
      }else{
        element["on"+type]=fn;
      }
    }

事件的解绑

 function f1(){
        console.log("添加绑定事件1");
        
    }
 //解除绑定事件
    //如果涉及到事件 解绑,里面的函数是命名函数,这样方便 解绑
    //1.
    btn.onclick = null;
    //2.
    btn.removeEventListener("click",f1,false);
    //3.
     btn.detachEvent("onclick",f1);


  //给任意元素 解绑事件
    function removeEvent(element,type,fn){
        if(element.removeEventListener){
            element.removeEventListener(type,fn,false);
        }else if(element.detachEvent){
            element.detachEvent("on"+type,fn);
        }else{
            element["on" + type] = null;
        }
    }

事件冒泡

<body>
    <div class="box" id="dv">
        <div class="box1" id="dv1">这是一个P标签</div>
    </div>
</body>
</html>

<script>
//事件冒泡:多个元素嵌套,有层次关系,这些元素都注册了相同的事件,如果里面的元素的事件触发了,外面的元素的事件自动触发

var pobjc = document.getElementById("dv1");
var dicObjc = document.getElementById("dv");

//点击p事件的时候,div的事件也跟着调用了
pobjc.addEventListener("click",f1,false);
function f1(){
    console.log("点击P标签了");
  
};

dicObjc.addEventListener("click",f2,false);

function f2(){
    console.log("点击div了");
    
}

//阻止事件冒泡



</script>

image.png

注意:每一个事件处理函数中都有一个隐藏的参数event,这个参数为事件处理参数对象,我们可以通过 这个参数里面的参数来阻止事件冒泡,需要注意的是,window对象中有一个事件参数也可以阻止事件冒泡,但是 火狐不支持

<script>

var box1 = document.getElementById("box1");
var box2 = document.getElementById("box2");
var box3 = document.getElementById("box3");
box1.addEventListener("click",f1,false);
box2.addEventListener("click",f2,false);
box3.addEventListener("click",f3,false);

//每一个事件函数有默认有一个 隐藏的event参数
//事件处理参数对象
//IE8是没有 event参数
function f1(e){
    console.log("div111111");
    console.log( event);
     //阻止事件冒泡 谷歌 IE支持  火狐不支持
     window.event.cancelBubble = true;
    //谷歌 火狐支持  IE不支持 
    e.stopPropagation();  
    
}

function f2(e){
    console.log("div22222");
     //阻止事件冒泡 谷歌 IE支持  火狐不支持
     window.event.cancelBubble = true;
    //谷歌 火狐支持  IE不支持 
    e.stopPropagation(); 
}

function f3(e){
    console.log("div33333");
    //阻止事件冒泡 谷歌 IE支持  火狐不支持
    window.event.cancelBubble = true;
    //谷歌 火狐支持  IE不支持 
    e.stopPropagation();

    
}

</script>

上一篇下一篇

猜你喜欢

热点阅读