JS精髓中的精髓,事件进阶使用

简介: 1.事件监听器如果要为一个元素添加多个相同的事件,该如何实现呢?这就需要用到另外一种添加事件的方式了,那就是——事件监听器所谓的“事件监听器”,指的是使用addEventListener()方法为一个元素添加事件,我们又称之为“绑定事件”案例:


1.事件监听器


如果要为一个元素添加多个相同的事件,该如何实现呢?这就需要用到另外一种添加事件的方式了,那就是——事件监听器

所谓的“事件监听器”,指的是使用addEventListener()方法为一个元素添加事件,我们又称之为“绑定事件”

案例:


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>TEXT</title>
    <script src="js/index.js"></script>
</head>
<body>
    <input type="button" id="btn" value="按钮"/>
</body>
</html>


window.onload = function() {
  var oBtn = document.getElementById("btn");
  oBtn.addEventListener("click",alertMes,false);
  function alertMes() {
    alert("jsjsjs!");
  }


使用“事件监听器”这种方式来为同一个元素添加多个相同的事件:


window.onload = function() {
  var oBtn = document.getElementById("btn");
  oBtn.addEventListener("click",function(){
    alert("第一次");
  },false);
  oBtn.addEventListener("click",function(){
    alert("第二次");
  },false);
  oBtn.addEventListener("click",function(){
    alert("第三次");
  },false);
}


当我们点击按钮后,浏览器会依次弹出3个对话框


2.解绑事件


在JavaScript中,我们可以使用removeEventListener()方法为元素解绑某个事件。解绑事件与绑定事件是功能相反的操作


<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <script>
       window.onload=function()
       {
           var oP=document.getElementById("content");
           var oBtn=document.getElementById("btn");
           // 为p添加事件
           oP.addEventListener("click",changeColor,false);
           // 点击按钮后,为p解除事件
           oBtn.addEventListener("click",function(){
              oP.removeEventListener("click",changeColor,false);
           },false);
           function changeColor()
           {
              this.style.color="hotpink";
            }
         }
   </script>
</head>
<body>
   <p id="content">javascript</p>
   <input id="btn" type="button" value="解除" />
</body>
</html>


removeEventListener()只可以解除“事件监听器”添加的事件,不可以解除“事件处理器”添加的事件。如果要解除“事件处理器”添加的事件,我们可以使用“obj.事件名 = null;”来实现
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script>
         window.onload=function()
         {
           var oDiv=document.getElementById("content");
           var oBtn=document.getElementById("btn");
           // 为p添加事件
           oDiv.onclick=changeColor;
           // 点击按钮后,为p解除事件
           oBtn.addEventListener("click",function(){
              oP.onclick=null;
           },false);
           function changeColor()
           {
              this.style.color="hotpink";
           }
        }
  </script>
</head>
<body>
  <p id="content">javascript</p>
  <input id="btn" type="button" value="解除" />
</body>
</html>

3.event对象


当一个事件发生的时候,这个事件有关的详细信息都会临时保存到一个指定的地方,这个地方就是event对象。每一个事件,都有一个对应的event对象。给大家打个比喻,我们都知道飞机都有黑匣子,飞机若失事,我们可以从黑匣子中获取详细的信息。这里,飞机失事可以看作一个事件,而黑匣子,就是我们所说的event对象



type


在JavaScript中,我们可以使用event对象的type属性来获取事件的类型


window.onload = function() {
  var oBtn = document.getElementById("btn");
  oBtn.onclick = function(e) {
    alert(e.type);
  };
}



keyCode


在JavaScript中,如果我们想要获取键盘中的键对应的键码,可以使用event对象的keyCode属性

event.keyCode返回的是一个数值,常用的按键及对应的键码如表

如果是【Shift】键、【Ctrl】键和【Alt】键,我们不需要通过keyCode属性来获取,而可以通过shiftKey、ctrlKey和altKey属性来获取


e.keyCode返回的是一个数字,而e.shiftKey、e.ctrlKey、e.altKey返回的都是布尔值🧨

案例:禁止shift,ctrl,alt键:


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script>
         window.onload=function(){
             document.onkeydown=function(e){
                if(e.shiftKey || e.altKey || e.ctrlKey){
                   alert("禁止使用shift、alt、ctrl键!")
                }
             }
         }
  </script>
</head>
<body>
  <p>heihei</p>
</body>
</html>


4.this


在事件操作中,可以这样理解:哪个DOM对象(元素节点)调用了this所在的函数,那么this指向的就是哪个DOM对象

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script>
         window.onload=function()
         {
             var oDiv=document.getElementsByTagName("div")[0];
             oDiv.onclick=function()
             {
                this.style.color="hotpink";
             }
        }
  </script>
</head>
<body>
  <div>hello</div>
</body>
</html>

this所在的函数是一个匿名函数,这个匿名函数被oDiv调用了,因此this指向的就是oDiv

目录
相关文章
|
7月前
|
JavaScript 前端开发 Java
【Java进阶】详解JavaScript事件
总的来说,JavaScript事件是JavaScript交互设计的核心,理解和掌握JavaScript事件对于编写高效、响应式的网页应用至关重要。
120 15
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
128 3
|
10月前
|
JavaScript 前端开发 测试技术
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
326 3
|
12月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
402 5
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
177 6
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
643 0
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
113 0
|
JavaScript 前端开发 Android开发
JavaScript触摸touch事件
JavaScript触摸touch事件
|
JavaScript 前端开发 UED
JavaScript 计时事件
JavaScript 计时事件
75 0