首页 > 其他 > 详细

事件模型

时间:2021-05-13 19:26:24      阅读:15      评论:0      收藏:0      [点我收藏+]

1. 监听函数定义:通过监听函数(listener)对事件做出反应。事件发生后,浏览器监听到了这个事件,就会执行对应的监听函数。这是事件驱动编程模式(event-driven)的主要编程方式

2. JS有三种方法:可以为事件绑定监听函数

(1)HTML的on-属性:

  • HTML 语言允许在元素的属性中,直接定义某些事件的监听代码
1 <body onload="doSomething()">
2 <div onclick="console.log(‘触发事件‘)">
  • 使用这个方法指定的监听代码,只会在冒泡阶段触发
1 <div onclick="console.log(2)">
2   <button onclick="console.log(1)">点击</button>
3 </div>

         上面代码中,<button><div>的子元素。<button>click事件,也会触发<div>click事件。由于on-属性的监听代码,只在冒泡阶段触发,所以点击结果是先输出1,再输出2,即事件从子元素开始冒泡到父元素

  • 直接设置on-属性,与通过元素节点的setAttribute方法设置on-属性,效果是一样的
1 el.setAttribute(‘onclick‘, ‘doSomething()‘);
2 // 等同于
3 // <Element onclick="doSomething()">
  • 违反了 HTML 与 JS代码相分离的原则,将两者写在一起,不利于代码分工,因此不推荐使用

(2)元素节点的事件属性

  • 元素节点对象的事件属性,同样可以指定监听函数
1 window.onload = doSomething;
2 
3 div.onclick = function (event) {
4   console.log(‘触发事件‘);
5 };
  • 使用这个方法指定的监听函数,也是只会在冒泡阶段触发
  • 这种方法与 HTML 的on-属性的差异是,它的值是函数名(doSomething),而不像后者,必须给出完整的监听代码(doSomething()
  • 同一个事件只能定义一个监听函数,也就是说,如果定义两次onclick属性,后一次定义会覆盖前一次。因此,也不推荐使用

(3)EventTarget.addEventListener()

window.addEventListener(‘load‘, doSomething, false);
  • 所有 DOM 节点实例都有addEventListener方法,用来为该节点定义事件的监听函数
  • 作为推荐的指定监听函数的方法。它有如下优点:
    • 同一个事件可以添加多个监听函数。
    • 能够指定在哪个阶段(捕获阶段还是冒泡阶段)触发监听函数。
    • 除了 DOM 节点,其他对象(比如windowXMLHttpRequest等)也有这个接口,它等于是整个 JavaScript 统一的监听函数接口

3. 监听函数内部的this指向触发事件的那个元素节点

 

<button id="btn" onclick="console.log(this.id)">点击</button>

 

       执行上面代码,点击后会输出btn

      其他两种监听函数的写法,this的指向也是如此

// HTML 代码如下
// <button id="btn">点击</button>
var btn = document.getElementById(‘btn‘);

// 写法一
btn.onclick = function () {
  console.log(this.id);
};

// 写法二
btn.addEventListener(
  ‘click‘,
  function (e) {
    console.log(this.id);
  },
  false
);

      上面两种写法,点击按钮以后也是输出btn

 

事件模型

原文:https://www.cnblogs.com/icyyyy/p/14764315.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!