dispatchEvent
dispatchEvent 在指定的 EventTarget 传递事件,以适当的顺序同步执行受影响的 EventListeners。
与由 DOM 触发并在事件循环的帮助下异步调用事件处理程序的本机事件不同,dispatchEvent 同步执行事件处理程序。
本教程旨在教我们创建和触发 DOM 事件(也称为合成事件)的正确技术。
我们可以使用 Event 构造函数创建事件,如以下使用 EventTarget.dispatchEvent() 方法的示例:
<!DOCTYPE html> <html> <head> <title>文档的标题</title> </head> <body> <h1 id="elemId">Welcome to onitroad</h1> <script> document.addEventListener("welcome", function(event) { alert("Hi, " + event.target.tagName); //Hi H1 }); let event = new Event("welcome", { bubbles: true }); elemId.dispatchEvent(event); </script> </body> </html>
addEventListener() 初始化一个函数,只要将定义的事件分派到目标,就会调用该函数。
要将添加数据添加到事件对象,我们可以使用 CustomEvent 接口和 detail 属性来传递自定义数据:
let event = new CustomEvent('eventName', { detail: elem.prop.name });
然后我们可以使用以下代码访问事件侦听器中指定的添加数据:
<!DOCTYPE html> <html> <head> <title>文档的标题</title> </head> <body> <h1 id="elemId">Welcome to onitroad</h1> <script> elemId.addEventListener("welcome", function(event) { alert(event.detail.name); }); elemId.dispatchEvent(new CustomEvent("welcome", { detail: { name: "onitroad" } })); </script> </body> </html>
通常建议从子元素触发事件:
<!DOCTYPE html> <html> <head> <title>文档的标题</title> </head> <body> <input type="text"></input> <script> let text = document.querySelector('input'); const eventAwesome = new CustomEvent('awesome', { bubbles: true, detail: { text: () => text.value } }); text.addEventListener('awesome', e => alert(e.detail.text())); text.addEventListener('input', e => e.target.dispatchEvent(eventAwesome)); </script> </body> </html>
要动态创建和调度事件,我们可以使用以下代码:
<!DOCTYPE html> <html> <head> <title>文档的标题</title> </head> <body> <input type="text"> </textarea> <script> let inputText = document.querySelector('input'); inputText.addEventListener('awesome', e => alert(e.detail.text())); inputText.addEventListener('input', function() { this.dispatchEvent(new CustomEvent('awesome', { bubbles: true, detail: { text: () => inputText.value } })) }); </script> </body> </html>
日期:2020-06-02 22:16:15 来源:oir作者:oir