javascript - 监听事件中的特定数据属性
问题描述
我需要监听一个message
具有data
属性的事件,并根据该属性执行不同的操作。
window.addEventListener("message", m => {
if m.data === "success" {
console.log("Success!")
} else {
console.log("Failure!")
}
});
现在,我想通过分派这样的事件使用按钮来测试它。但是,我只能找到详细属性,而不是如何设置数据属性:
<button id="messageButton">Send Message</button>
和
messageButton.onclick = function () {
messageButton.dispatchEvent(new CustomEvent("message", { bubbles: true, detail: "success" }))
}
如何使用data
属性而不是detail
属性发送?
解决方案
如果您正在测试消息事件,您可能需要MessageEvent
而不是CustomEvent
. MessageEvent
的构造函数接受具有data
属性的“init”对象:
function sendMessage(data) {
const event = new MessageEvent("message", { data });
window.dispatchEvent(event);
}
例子:
window.addEventListener("message", m => {
if (m.data === "success") {
console.log("Success!");
} else {
console.log("Failure!");
}
});
function sendMessage(data) {
const event = new MessageEvent("message", { data });
window.dispatchEvent(event);
}
document.getElementById("btnSuccess").addEventListener("click", function() {
sendMessage("success");
});
document.getElementById("btnFailure").addEventListener("click", function() {
sendMessage("failure");
});
<button id="btnSuccess" type="button">Send 'success' Message</button>
<button id="btnFailure" type="button">Send 'failure' Message</button>
但是,如果您想使用CustomEvent
,您将创建事件对象,然后将属性添加到它:
function sendMessage(data) {
const event = new CustomEvent("message", { bubbles: true });
event.data = data;
window.dispatchEvent(event);
}
例子:
window.addEventListener("message", m => {
if (m.data === "success") {
console.log("Success!");
} else {
console.log("Failure!");
}
});
function sendMessage(data) {
const event = new CustomEvent("message", { bubbles: true });
event.data = data;
window.dispatchEvent(event);
}
document.getElementById("btnSuccess").addEventListener("click", function() {
sendMessage("success");
});
document.getElementById("btnFailure").addEventListener("click", function() {
sendMessage("failure");
});
<button id="btnSuccess" type="button">Send 'success' Message</button>
<button id="btnFailure" type="button">Send 'failure' Message</button>
推荐阅读
- linux - 内核 4.4.192 自旋锁已解锁
- sap-cloud-sdk - SAP JAVA VDM 在输入中拆分 $filter
- javascript - 在 Vue 上处理 Laravel 链接
- database - 是否可以复制 Cassandra 中的两个键空间?
- python - 如何创建扩展公式的函数?
- macos - Mac OS X - 获取系统上运行的所有进程的列表?
- vue.js - 如何在 vue.js 中使用 options 参数自定义插件?
- arduino - 从 arduino 的串行电车获取 INT
- javascript - 从具有相同突变的另一个方法调用方法
- javascript - 星火AR v98 | JavaScript 错误:意外的场景对象引用