I need to listen to a message
event that will have a data
attribute and depending on this attribute do different actions.
JavaScript
x
8
1
window.addEventListener("message", m => {
2
if m.data === "success" {
3
console.log("Success!")
4
} else {
5
console.log("Failure!")
6
}
7
});
8
Now, I want to test this with a button by dispatching such an event. However, I can only find the detail attribute, but not how to set the data attribute:
JavaScript
1
2
1
<button id="messageButton">Send Message</button>
2
and
JavaScript
1
4
1
messageButton.onclick = function () {
2
messageButton.dispatchEvent(new CustomEvent("message", { bubbles: true, detail: "success" }))
3
}
4
How can I send with the data
attribute instead of the detail
attribute?
Advertisement
Answer
If you’re testing a message event, you probably want MessageEvent
rather than CustomEvent
. MessageEvent
‘s constructor accepts an “init” object with a data
property:
JavaScript
1
5
1
function sendMessage(data) {
2
const event = new MessageEvent("message", { data });
3
window.dispatchEvent(event);
4
}
5
Example:
JavaScript
1
19
19
1
window.addEventListener("message", m => {
2
if (m.data === "success") {
3
console.log("Success!");
4
} else {
5
console.log("Failure!");
6
}
7
});
8
9
function sendMessage(data) {
10
const event = new MessageEvent("message", { data });
11
window.dispatchEvent(event);
12
}
13
14
document.getElementById("btnSuccess").addEventListener("click", function() {
15
sendMessage("success");
16
});
17
document.getElementById("btnFailure").addEventListener("click", function() {
18
sendMessage("failure");
19
});
JavaScript
1
2
1
<button id="btnSuccess" type="button">Send 'success' Message</button>
2
<button id="btnFailure" type="button">Send 'failure' Message</button>
But if you want to use CustomEvent
, you’d create the event object, then add the property to it:
JavaScript
1
6
1
function sendMessage(data) {
2
const event = new CustomEvent("message", { bubbles: true });
3
event.data = data;
4
window.dispatchEvent(event);
5
}
6
Example:
JavaScript
1
20
20
1
window.addEventListener("message", m => {
2
if (m.data === "success") {
3
console.log("Success!");
4
} else {
5
console.log("Failure!");
6
}
7
});
8
9
function sendMessage(data) {
10
const event = new CustomEvent("message", { bubbles: true });
11
event.data = data;
12
window.dispatchEvent(event);
13
}
14
15
document.getElementById("btnSuccess").addEventListener("click", function() {
16
sendMessage("success");
17
});
18
document.getElementById("btnFailure").addEventListener("click", function() {
19
sendMessage("failure");
20
});
JavaScript
1
2
1
<button id="btnSuccess" type="button">Send 'success' Message</button>
2
<button id="btnFailure" type="button">Send 'failure' Message</button>