slotchange

The slotchange event is fired on an HTMLSlotElement instance (<slot> element) when the node(s) contained in that slot change.

Note: the slotchange event doesn't fire if the children of a slotted node change — only if you change (e.g. add or delete) the actual nodes themselves.

Bubbles Yes
Cancelable No
Target objects HTMLSlotElement
Interface Event

Examples

The following snippet is taken from our slotchange example (see it live also).

let slots = this.shadowRoot.querySelectorAll('slot');
slots[1].addEventListener('slotchange', function(e) {
  let nodes = slots[1].assignedNodes();
  console.log('Element in Slot "' + slots[1].name + '" changed to "' + nodes[0].outerHTML + '".');
});

Here we grab references to all the <slot>s, then add a slotchange event listener to the template's second slot — which is the one which has its contents changed in the example.

Every time the element inserted in the slot changes, we log a report to the console saying which slot has changed, and what the new node inside the slot is.

Inheritance

The slotchange event implements the Event interface — it has available the properties and methods defined on this interface.

Specifications

Specification Status Comment
DOM
The definition of '"Mutation observers" and slotchange event' in that specification.
Living Standard Initial definition

Browser compatibility

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
Feature Chrome Edge Firefox Internet Explorer Opera Safari
Basic support (Yes) No support1 (Yes)2 3
63 (63)
No support (Yes) (Yes)
Feature WebView Android Chrome Android Edge Mobile Firefox Android Opera Android Safari iOS
Basic support (Yes) (Yes) No support1 (Yes)2 3
63.0 (63)
(Yes) (Yes)

1. Under consideration

2. Until version 59 (exclusive): this feature is behind the dom.webcomponents.enabled preference (needs to be set to true) and the dom.webcomponents.customelements.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.

3. From version 59: this feature is behind the dom.webcomponents.shadowdom.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.

Document Tags and Contributors

Contributors to this page: ExE-Boss, Tigt, platosha, chrisdavidmills
Last updated by: ExE-Boss,