JavaScript元素事件的绑定与解绑

简介: JavaScript元素事件的绑定与解绑

绑定多个事件


1. 对象.addEventListener(“事件类型”,事件处理函数,false)——谷歌和火狐支持,IE8不支持


  • 参数1:事件的类型—事件的名字,没有on


  • 参数2:事件处理函数—函数(命名函数,匿名函数)


  • 参数3:布尔类型,指定事件处理函数的时期或阶段-------先写false


(第三个参数后文事件冒泡时候再说,链接:https://blog.csdn.net/weixin_45525272/article/details/108142029


  为同一个元素绑定多个相同的事件--
 my$("btn").addEventListener("click",function () {
   console.log("你好啊");
 },false);
 my$("btn").addEventListener("click",function () {
   console.log("你好牛啊");
 },false);
 my$("btn").addEventListener("click",function () {
   console.log("你好牛逼啊");
 },false);
 my$("btn").addEventListener("click",function () {
   console.log("你是好牛逼啊");
 },false);


2. 对象.attachEvent(“有on的事件类型”,事件处理函数)——谷歌不支持,火狐不支持,IE8支持


  • 参数1:事件类型—事件名字,有on


  • 参数2:事件处理函数—函数(命名函数,匿名函数)


 my$("btn").attachEvent("onclick",function () {
   console.log("小杨好帅哦1");
 });
 my$("btn").attachEvent("onclick",function () {
   console.log("小杨好帅哦2");
 });
 my$("btn").attachEvent("onclick",function () {
   console.log("小杨好帅哦3");
//  });


3. 绑定事件兼容代码


  //为任意元素.绑定任意的事件, 任意的元素,事件的类型,事件处理函数
  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;
    }
  }
  addEventListener(my$("btn"),"click",function () {
    console.log("你好啊");
  });
  addEventListener(my$("btn"),"click",function () {
    console.log("你好二啊");
  });
  addEventListener(my$("btn"),"click",function () {
    console.log("你好二虎啊");
  });


4.两种方法的区别


相同点: 都可以为元素绑定事件


不同点:


  1. 方法名不一样


  1. 参数个数不一样


addEventListener三个参数,


attachEvent两个参数


  1. addEventListener 谷歌,火狐,IE11支持,IE8不支持


attachEvent 谷歌火狐不支持,IE11不支持,IE8支持


  1. this不同,


addEventListener 中的this是当前绑定事件的对象


attachEvent中的this是window


  1. addEventListener中事件的类型(事件的名字)没有on


attachEvent中的事件的类型(事件的名字)有on


事件解绑


注意:用什么方式绑定事件,就应该用对应的方式解绑事件


1.对象.on事件名字=null


 // 1.绑定事件
 my$("btn").onclick=function () {
   console.log("我很好");
 };
 my$("btn2").onclick=function () {
   // 2.解绑事件
   my$("btn").onclick=null;
 };


2. removeEventListener解绑事件


对象.addEventListener(“没有on的事件类型”,命名函数,false);—绑定事件


对象.removeEventListener(“没有on的事件类型”,函数名字,false);


 function f1() {
   console.log("第一个事件");
 }
 function f2() {
   console.log("第二个事件");
 }
 my$("btn").addEventListener("click",f1,false);
 my$("btn").addEventListener("click",f2,false);
 //点击第二个按钮把第一个按钮的第一个点击事件解绑
 my$("btn2").onclick=function () {
   //解绑事件的时候,需要在绑定事件的时候,使用命名函数
   my$("btn").removeEventListener("click",f1,false);
 };


3. detachEvent解绑事件


对象.attachEvent(“on事件类型”,命名函数);—绑定事件


对象.detachEvent(“on事件类型”,函数名字);


  function f1() {
    console.log("第一个事件");
  }
  function f2() {
    console.log("第二个事件");
  }
  my$("btn").attachEvent("onclick",f1);
  my$("btn").attachEvent("onclick",f2);
  my$("btn2").onclick=function () {
      my$("btn").detachEvent("onclick",f1);
  };


4. 解绑兼容性代码


   //绑定事件的兼容
  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 removeEventListener(element,type,fnName) {
     if(element.removeEventListener){
       element.removeEventListener(type,fnName,false);
     }else if(element.detachEvent){
       element.detachEvent("on"+type,fnName);
     }else{
       element["on"+type]=null;
     }
   }


案例:


 function f1() {
    console.log("第一个事件");
  }
  function f2() {
    console.log("第二个事件");
  }
  addEventListener(my$("btn1"),"click",f1);
  addEventListener(my$("btn1"),"click",f2);
  my$("btn2").onclick=function () {
    removeEventListener(my$("btn1"),"click",f1);
  };


JavaScript switch加载多个事件


common.js


function my$(id) {
    return document.getElementById(id);
}
//设置任意的标签中间的任意文本内容
function setInnerText(element,text) {
    //判断浏览器是否支持这个属性
    if(typeof element.textContent =="undefined"){//不支持
        element.innerText=text;
    }else{//支持这个属性
        element.textContent=text;
    }
}
//获取任意标签中间的文本内容
function getInnerText(element) {
    if(typeof element.textContent=="undefined"){
        return element.innerText;
    }else{
        return element.textContent;
    }
}


index.html


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>title</title>
</head>
<body>
<input type="button" value="小红帽" id="btn"/>
<script src="common.js"></script>
<script>
  //为同一个元素绑定多个不同的事件,指向相同的事件处理函数
  my$("btn").onclick = f1;
  my$("btn").onmouseover = f1;
  my$("btn").onmouseout = f1;
  function f1(e) {
    switch (e.type) {
      case "click":
        alert("好帅哦");
        break;
      case "mouseover":
        this.style.backgroundColor = "red";
        break;
      case "mouseout":
        this.style.backgroundColor = "green";
        break;
    }
  }
   // my$("btn").οnmοuseοver=function (e) {
   //   console.log(e);
   // };
</script>
</body>
</html>
相关文章
|
2月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
3月前
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
50 3
|
2月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
68 5
|
2月前
|
JavaScript 前端开发 开发者
.js的dom元素操作
【10月更文挑战第29天】通过灵活运用这些 DOM 元素操作方法,JavaScript 可以实现丰富的网页交互效果,如动态更新页面内容、响应用户操作、创建和删除页面元素等。在实际开发中,开发者可以根据具体的需求和场景,选择合适的 DOM 元素操作方法来实现所需的功能,为用户提供更加流畅和动态的网页体验。
|
3月前
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
68 6
|
3月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
99 4
|
3月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
59 4
|
3月前
|
JavaScript 前端开发 索引
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
91 1
|
3月前
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
203 0
|
3月前
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
65 0