详解JavaScript事件处理程序

堆栈溢出
• 阅读 214
一、事件是什么?

事件是用户与浏览器进行交互的方式。譬如用户点击按钮就会产生click事件,浏览器会找到相应js代码并执行,我们要做的就是按照规则编写js代码放在指定位置即可。


二、怎么使用事件功能?

两种方式使用事件功能:1、增加元素的事件属性;2、调用内置对象的方法addEventListener。

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Random color example — event handler attribute</title>
    <style>
        button {
            margin: 10px
        }
    </style>
</head>

<body>
    <button onclick="bgChange()">Change color</button>
    <button id="test">click</button>
    <script>
        // 法一:增加事件
        function random(number) {
            return Math.floor(Math.random() * number);
        }

        function bgChange() {
            const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
            document.body.style.backgroundColor = rndCol;
        }


        // 法二:增加事件
        document.querySelector("#test").addEventListener("click", () => alert("click"));
    </script>
</body>

</html>

三、核心概念
1、事件冒泡

当元素发生了某个事件,不仅会执行本元素的事件处理程序,还会一直向上寻找所有父元素对应的事件处理程序并执行。


2、事件委托

让父元素监听执行子元素的某个事件,原理:子元素没有注册事件处理程序,事件会冒泡向上寻找相应执行程序。

<ul id="parent-list">
    <li id="post-1">Item 1</li>
    <li id="post-2">Item 2</li>
    <li id="post-3">Item 3</li>
    <li id="post-4">Item 4</li>
    <li id="post-5">Item 5</li>
    <li id="post-6">Item 6</li>
</ul>
// 父元素增加 click 监听事件
document.getElementById("parent-list").addEventListener("click", function(e) {
    // e.target 是被点击元素
    if(e.target && e.target.nodeName == "LI") {
        console.log("List item ", e.target.id.replace("post-", ""), " was clicked!");
    }
});

四、Event

事件都是继承于 Event 对象。

1、event.preventDefault()

功能:不执行默认操作,但是事件还是会继续冒泡。

实例:在表单提交中,通常会做一些数据校验,如果数据不符合格式,可以用preventDefault() 方法来阻止数据发送到服务器的默认操作。更多...

form.onsubmit = function(e) {
  if (fname.value === '' || lname.value === '') {
    e.preventDefault();
    para.textContent = 'You need to fill in both names!';
  }
}

2、event.stopPropagation

功能:让事件响应到此结束,不再向上冒泡。更多...

video.onclick = function(e) {
  e.stopPropagation();
  video.play();
};

五、EventTarget

EventTarget 是一个 DOM 接口,可以监听、接收、移除事件。

1、EventTarget.addEventListener

功能:将 回调函数 和 元素事件 进行绑定,当事件发生时,回调函数会被执行。更多...

function clickTest(event) {
  if (event.type == click) {
  } else {
  }
}

// 添加事件监听器
var el = document.getElementById("btnTest");
el.addEventListener("click", clickTest);

2、EventTarget.removeEventListener

删除用 EventTarget.addEventListener 注册的事件处理程序。更多...

var body = document.querySelector('body'),
    clickTarget = document.getElementById('click-target'),
    mouseOverTarget = document.getElementById('mouse-over-target'),
    toggle = false;

function makeBackgroundYellow() {
    'use strict';

    if (toggle) {
        body.style.backgroundColor = 'white';
    } else {
        body.style.backgroundColor = 'yellow';
    }

    toggle = !toggle;
}

clickTarget.addEventListener('click',
    makeBackgroundYellow,
    false
);

mouseOverTarget.addEventListener('mouseover', function () {
    'use strict';

    clickTarget.removeEventListener('click',
        makeBackgroundYellow,
        false
    );
});

3、EventTarget.dispatchEvent

功能:代码中直接触发事件。更多...

实例:编程方式生成单击事件。自定义事件

function simulateClick() {
  const event = new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true
  });
  const cb = document.getElementById('checkbox');
  const cancelled = !cb.dispatchEvent(event);

  if (cancelled) {
    // A handler called preventDefault.
    alert("cancelled");
  } else {
    // None of the handlers called preventDefault.
    alert("not cancelled");
  }
}

六、查看所有可用事件

七、参考文档
点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
3年前
一文解读JavaScript事件对象和表单对象
前言相信做网站对JavaScript再熟悉不过了,它是一门脚本语言,不同于Python的是,它是一门浏览器脚本语言,而Python则是服务器脚本语言,我们不光要会Python,还要会JavaScript,因为它对做网页方面是有很大作用的。1.事件对象(Event)1).事件对象常量bubbles事件是否是起泡事件类型cancelabl
Wesley13 Wesley13
3年前
jabdp宝典:新版事件编辑
         低代码开发平台jabdp的页面事件编辑迎来了重大更新,本次更新对事件编辑进行了许多优化。好了废话不多说,就让小编带大伙来了解下新版事件编辑吧!(新版)事件编辑        Jabdp平台的javascript编程是基于事件驱动的,所谓事件驱动,就是指在页面中执行了某种操作所产生的动作,就称为“事件”(Event)。比如
Wesley13 Wesley13
3年前
JS的事件冒泡和事件捕获
什么是事件?事件是文档和浏览器窗口中发生的特定的交互瞬间。事件是javascript应用跳动的心脏,也是把所有东西黏在一起的胶水,当我们与浏览器中web页面进行某些类型的交互时,事件就发生了。事件可能是用户在某些内容上的点击,鼠标经过某个特定元素或按下键盘上的某些按键,事件还可能是web浏览器中发生的事情,比如说某
Stella981 Stella981
3年前
Android的消息循环与Handler机制理解
一、概念1、事件驱动型什么是事件驱动?就是有事了才去处理,没事就躺着不动。假如把用户点击按钮,滑动页面等这些都看作事件,事件产生后程序就执行相应的处理方法,就是属于事件驱动型。2、消息循环把需要处理的事件表示成一个消息,并且把这个消息放入一个队列。消息循环就是一循环,for或者while都一样。从消息队列里面取出未处理的消息,然后调用该消息的
Stella981 Stella981
3年前
JavaScript事件详解
1.事件传播机制:事件冒泡,事件捕获。2.注册事件处理程序方式:设置html标签属性为事件处理程序,文档元素的事件处理程序属性,名字由“on”后面跟着事件名组成,例如:onclick,onmouseover,用法如下1<d
Stella981 Stella981
3年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event
Stella981 Stella981
3年前
JavaScript 基础(四)
HTMLDOMEvent(事件)HTML4.0的新特性之一是有能力使HTML事件触发浏览器中的动作(action),比如当用户点击某个HTML元素时启动一段JavaScript。下面是一个属性列表,这些属性可插入HTML标签来定义事件动作。onclick//当用户点
Stella981 Stella981
3年前
JavaScript事件 ——常见事件
1.什么是事件?      当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了。事件可能是用户在某些内容上的点击、鼠标经过某个特定元素或按下键盘上的某些按键。事件还可能是Web浏览器中发生的事情,比如说某个Web页面加载完成,或者是用户滚动窗口或改变窗口大小。常见事件:(http://www.runoo
Stella981 Stella981
3年前
JavaScript事件属性event.target和currentTarget 属性的区别。
event.target获取的是触发事件的标签元素event.currentTarget获取到的是发起事件的标签元素一、事件属性:event.targettarget事件委托的定义:本来该自己干的事,但是自己不干,交给别人来干例子1!(https://oscimg.oschina.n
Stella981 Stella981
3年前
JavaScript——页面相关事件
页面事件是在页面加载或改变浏览器的大小、位置,以及对页面中的滚动条进行操作时,所触发的事件处理程序。加载与卸载事件加载事件(onload)是在网页加载完毕后触发相应的事件处理程序,它可以在网页加载完成后对网页中的表格样式、字体、背景颜色等进行设置。卸载事件(unload)是在卸载网页时触发相应的事件处理程序,卸载网页是指关闭当前页或
Stella981 Stella981
3年前
Javascript高级编程学习笔记(57)—— 事件(1)事件流
事件JS与HTML的交互是通过事件实现的而事件指的就是:文档或浏览器窗口特定的交互瞬间可以通过侦听器来预定事件,以便在事件发生时执行相应的代码这种模式也是设计模式中的观察者模式事件流有了事件,也就有了事件流的概念事件流故名思意:也就是事件的流向,所以事件流描述的是从页面中接收事件的顺序虽然事件流描述的都是事件的流