👀 Live Preview
Load the audio, then click Reload media to fire emptied:
Load audio, then click Reload to see emptied fire.

The onemptied attribute is an inline event handler that runs JavaScript when the emptied event fires. That happens on <audio> and <video> when the element clears its current media resource and returns to an empty state. Common triggers include calling element.load() on already-loaded media, changing src, or swapping <source> children. Use it to reset custom players, clear progress UI, or log when a clip is about to reload. It does not fire when the user simply seeks to the beginning—only when the resource itself is released.
Inline JS.
Media reset.
Media elements.
Reload trigger.
Preferred way.
Property API.
onemptied AttributeThe primary purpose of onemptied is to react when media is reset or replaced. You might hide a custom progress bar, clear cached duration labels, show a “Reloading…” message, or tear down analytics tied to the previous clip. The event sits in the media lifecycle alongside loadstart, loadedmetadata, and abort.
After emptied, the browser often fires loadstart as it fetches media again. Update UI in emptied for the cleared state; use loadedmetadata or canplay when the new resource is ready.
Production code should use video.addEventListener("emptied", handler). Inline onemptied on <audio> or <video> works for learning but separates concerns less cleanly.
Set onemptied on audio or video, or assign element.onemptied:
<script>
function handleEmptied() {
console.log("Media resource cleared.");
}
</script>
<video controls onemptied="handleEmptied()">
<source src="clip.mp4" type="video/mp4">
</video>emptied event fires.<audio> and <video> media elements.media.onemptied = function() { … }.media.addEventListener("emptied", handler).loadstart when media reloads.The onemptied attribute accepts a string of JavaScript code:
onemptied="handleEmpty()" — Call a named function.onemptied="resetPlayerUI()" — Inline statement.video.onemptied = () => { … } assigns the handler.const audio = document.getElementById("song");
audio.addEventListener("emptied", () => {
document.getElementById("duration-label").textContent = "—";
});
document.getElementById("reload-btn").addEventListener("click", () => {
audio.load(); // triggers emptied, then loadstart
});| Trigger | emptied fires? | Notes |
|---|---|---|
element.load() on loaded media | Yes | Most common demo trigger |
Change src or <source> | Yes | Old resource cleared first |
| Seek to time 0 | No | Playback position only |
| First page load | Usually no | Nothing to empty yet |
| Handler attribute | onemptied | Inline on media tag |
| Applicable elements | audio, video | Media elements only |
| Target | Supported? | Notes |
|---|---|---|
<audio> | Yes | Inline onemptied on audio |
<video> | Yes | Most common use |
<source> | No | Event fires on parent media element |
<input>, <img> | No | Not media emptied events |
onemptied vs onloadstart vs onabort| Handler | When it fires | Typical use |
|---|---|---|
onemptied | Media resource cleared / reset | Reset UI, clear duration labels |
onloadstart | Browser starts fetching media | Show loading spinner |
onabort | Fetch aborted (often by user) | Handle cancelled downloads |
Inline onemptied on audio, addEventListener on video, and reload with load().
Load the audio, then click Reload media to fire emptied:
Load audio, then click Reload to see emptied fire.
Run a function when the media resource is cleared:
<video controls onemptied="handleEmptyEvent()">
<source src="example.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
<script>
function handleEmptyEvent() {
console.log("Media element has been emptied!");
}
</script>The browser fires emptied on the video element when its media resource is released. The inline onemptied attribute wires up the handler.
Attach the handler with addEventListener:
<script>
document.getElementById("dynamicVideo").addEventListener("emptied", function () {
console.log("Dynamic emptied event triggered!");
});
// Or property form:
document.getElementById("dynamicVideo").onemptied = function () { /* … */ };
</script>Register the listener once at page load. When the video resource is cleared, your reset logic runs before the next fetch begins.
Calling load() on loaded media clears the resource and fires emptied:
const audio = document.getElementById("song");
audio.addEventListener("emptied", () => {
status.textContent = "Resource cleared — waiting for reload…";
});
audio.addEventListener("canplay", () => {
status.textContent = "Ready to play again.";
});
document.getElementById("reload").addEventListener("click", () => {
audio.load();
});load() aborts the current resource and starts fresh. Use onemptied to reset UI that depends on the previous clip.
emptied.controls support keyboard users; custom players need full keyboard support.Audio or video holds a resource.
load(), new src, or source swap.
Resource released; onemptied runs.
Reset UI; wait for loadstart.
The emptied event and onemptied handler are supported in all modern browsers on <audio> and <video> elements — Chrome, Firefox, Safari, and Edge.
onemptied supportAll major browsers fire the underlying event and honor the onemptied handler attribute.
Bottom line: Use onemptied confidently on media elements; prefer addEventListener in production code.
emptied firesaddEventListener("emptied", …) in production codeloadstart and canplay for full reload flowload() and src changesemptied with seeking to the start of a clipalert() inside media event handlersemptied means playback finished (use onended)<source> instead of the media elementThe onemptied attribute runs JavaScript when a media element clears its resource — a key moment for resetting custom players, analytics, and UI state before media loads again.
Prefer addEventListener("emptied", …), understand the difference from loadstart and seek events, and test reload paths with load() and source changes in your apps.
onemptiedBookmark these before wiring your next media reload handler.
Resource cleared.
EventMedia only.
ScopeCommon trigger.
APIPreferred.
ModernNot time 0.
Compareemptied event fires — when a media element releases its current media resource.<audio> and <video>. Attach handlers to the media element, not individual <source> tags.element.load(), changing src, or replacing sources. Not when the user seeks to the start.emptied means the old resource was cleared. loadstart means fetching began — often right after emptied during a reload.addEventListener("emptied", handler) is preferred for production. Inline onemptied is fine for tutorials and quick demos.audio and video elements.Practice the onemptied attribute with reload and source-change examples in the Try It editor.
5 people found this page helpful