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


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.


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


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

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 Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support (Yes) (Yes) No support (Yes) ?
Feature Android Chrome Firefox Mobile (Gecko) Opera Mobile Safari Mobile
Basic support ? (Yes) (Yes) (Yes) ?

Document Tags and Contributors

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