Blogger Information
Blog 20
fans 0
comment 1
visits 13225
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
事件的几种添加方式和删除方法及事件委托的实现
zg的php学习
Original
1486 people have browsed it

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();
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:其实js中的很多概念非常的形象, 不能想复杂了, 想简单点, 反而好理解, 对不对?
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post