29
loading...
This website collects cookies to deliver better user experience
click
or my-event
.customEventInit
which accepts some arguments but we're talking about this later on.new CustomEvent('my-event')
dispatchEvent
method. To read/intercept our event we should register an event listener using the addEventListener
method.<button id="menu">open</button>
<script type="text/javascript">
menu.onclick = () => menu.dispatchEvent(new CustomEvent('menu-open'));
menu.addEventListener('menu-open', () => console.log('The menu is open.'));
</script>
document
itself.bubbles
flag to true
in the constructor.<button id="menu">open</button>
<script type="text/javascript">
menu.onclick = () => {
const event = new CustomEvent('menu-open', {bubbles: true};
menu.dispatchEvent(event);
});
document.addEventListener('menu-open', () => console.log('The menu is open.'));
</script>
submit
event, and we could cancel this behavior by using the event.preventDefault()
. Our custom events could have an associated behavior like open the menu
and support the cancellation of it by setting the cancelable
flag as true
.<button id="menu">open</button>
<div id="dropdown" hidden>Menu content</div>
<script type="text/javascript">
menu.onclick = () => {
const event = new CustomEvent('menu-open', {cancelable: true});
if (menu.dispatchEvent(event)) {
dropdown.hidden = false
} else {
console.log('The action was prevented.')
}
};
menu.addEventListener('menu-open', e => {
if (confirm("Call preventDefault?")) {
e.preventDefault();
}
})
</script>
detail
attribute on its constructor.<button id="menu">open</button>
<script type="text/javascript">
menu.onclick = () => {
const event = new CustomEvent('menu-open', {
detail: { openByUser: true }
});
menu.dispatchEvent(event)
};
menu.addEventListener('menu-open', e => {
if (e.detail.openByUser) {
console.log('The user open the menu.')
}
})
</script>
document
level so any JavaScript module can listen our events easily.