博客列表 >事件的几种添加方式和删除方法及事件委托的实现

事件的几种添加方式和删除方法及事件委托的实现

zg的php学习
zg的php学习原创
2021年10月06日 12:29:351485浏览

JS 事件的几种添加方式和删除方法及事件委托的实现

JS 事件的添加方法

1.属性方式:直接在 html 标签中添加事件属性。

  1. <button onclick="alert('标签属性方式添加事件')">属性方式</button>

2.对象方式:在元素对象上添加事件,这种方式添加的事件会覆盖前面的(非事件监听器添加的)同名事件。

  1. document.querySelector("button").onclick = () => alert("对象方式添加的事件");

3.事件监听器方式:在对象的事件监听列表中添加监听事件,这种方式添加的事件不会覆盖前面的同名事件。

  1. document
  2. .querySelector("button")
  3. .addEventListener("click", () => alert("事件监听器方式添加的事件"));

4.自定义事件(事件派发)

  1. document
  2. .querySelector("button")
  3. .addEventListener("testEvent", alert("自定义事件(事件派发)"));
  4. //触发自定义事件(事件派发)
  5. document.querySelector("button").dispatchEvent(new Event("testEvent"));

事件删除

1.删除属性方式和对象方式添加的事件:

  1. document.querySelector("button").onclick = null;

2.删除事件监听器添加的事件:如果事件监听器添加的事件处理函数是匿名函数,则无法删除,因为没有函数名。所以这里只能删除拥有非匿名处理函数的事件。

  1. //声明事件处理函数f1
  2. let f1 = () => alert("事件监听器方式添加的事件1");
  3. //事件监听器方式给onclick事件添加一个事件处理函数f1
  4. document.querySelector("button").addEventListener("click", f1);
  5. //删除事件监听列表中的onclick事件的f1这个处理函数
  6. document.querySelector("button").removeEventListener("click", f1);

事件委托

事件冒泡:当事件在某个元素上被触发之后,会沿着 DOM 树逐级触发父元素的同名事件。
DOM事件流

事件委托(事件代理):依据冒泡原理,只需要在某一级父元素上指定一个事件处理程序,就可以管理某一类型的所有事件。

HTML 代码:

  1. <ul>
  2. <li>item 1</li>
  3. <li>item 2</li>
  4. <li>item 3</li>
  5. <li>item 4</li>
  6. <li>item 5</li>
  7. </ul>

示例:点击某个 li 时,改变其背景色

1.普通(非事件代理)模式:在每个 li 上添加点击事件

  1. document
  2. .querySelectorAll("li")
  3. .forEach(
  4. (li) => (li.onclick = (ev) => (ev.target.style.backgroundColor = "yellow"))
  5. );

2.事件代理模式:只要在 ul 上添加点击事件,就能实现管理所有 li 的点击事件

  1. document.querySelector("ul").onclick = (ev) =>
  2. (ev.target.style.backgroundColor = "yellow");

fetch API

fetch()方法,可以发起对远程资源的请求,用来替代原来的 XMLHttpRequest 对象。

应用示例:
用 json.data 文件模拟批量数据

  1. //json.data 内容
  2. [
  3. { name: "张三", sex: "male", age: 32 },
  4. { name: "李四", sex: "male", age: 28 },
  5. { name: "小美", sex: "famale", age: 19 },
  6. { name: "大漂亮", sex: "famale", age: 23 },
  7. // ...
  8. ];
  1. const request = async () => {
  2. try {
  3. //默认GET方式请求
  4. const response = await fetch("json.data");
  5. if (response.ok) {
  6. const jsonData = await response.json();
  7. console.log(jsonData);
  8. //...后续处理jsonData数据;
  9. }
  10. } catch (ex) {
  11. console.log(ex);
  12. }
  13. };
  14. request();
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议