HTML onemptied Attribute

Beginner
⏱️ 5 min read
📚 Updated: Jun 2026
🎯 3 Examples
Media & Playback

Introduction

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.

What You’ll Learn

01

Event handler

Inline JS.

02

emptied

Media reset.

03

audio / video

Media elements.

04

element.load()

Reload trigger.

05

addEventListener

Preferred way.

06

.onemptied

Property API.

Purpose of onemptied Attribute

The 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.

💡
Prefer addEventListener on the media element

Production code should use video.addEventListener("emptied", handler). Inline onemptied on <audio> or <video> works for learning but separates concerns less cleanly.

📝 Syntax

Set onemptied on audio or video, or assign element.onemptied:

onemptied.html
<script>
  function handleEmptied() {
    console.log("Media resource cleared.");
  }
</script>

<video controls onemptied="handleEmptied()">
  <source src="clip.mp4" type="video/mp4">
</video>

Syntax Rules

  • Value is JavaScript code executed when the emptied event fires.
  • Applies to <audio> and <video> media elements.
  • Fires when the element releases its media resource (not on simple seek-to-start).
  • JavaScript: media.onemptied = function() { … }.
  • Modern alternative: media.addEventListener("emptied", handler).
  • Often followed by loadstart when media reloads.

💎 Values

The onemptied attribute accepts a string of JavaScript code:

  • onemptied="handleEmpty()" — Call a named function.
  • onemptied="resetPlayerUI()" — Inline statement.
  • JavaScript: video.onemptied = () => { … } assigns the handler.
onemptied-js.html
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
});

⚡ Quick Reference

Triggeremptied fires?Notes
element.load() on loaded mediaYesMost common demo trigger
Change src or <source>YesOld resource cleared first
Seek to time 0NoPlayback position only
First page loadUsually noNothing to empty yet
Handler attributeonemptiedInline on media tag
Applicable elementsaudio, videoMedia elements only

Applicable Elements

TargetSupported?Notes
<audio>YesInline onemptied on audio
<video>YesMost common use
<source>NoEvent fires on parent media element
<input>, <img>NoNot media emptied events

onemptied vs onloadstart vs onabort

HandlerWhen it firesTypical use
onemptiedMedia resource cleared / resetReset UI, clear duration labels
onloadstartBrowser starts fetching mediaShow loading spinner
onabortFetch aborted (often by user)Handle cancelled downloads

Examples Gallery

Inline onemptied on audio, addEventListener on video, and reload with load().

👀 Live Preview

Load the audio, then click Reload media to fire emptied:

Load audio, then click Reload to see emptied fire.

Example — Inline onemptied on video

Run a function when the media resource is cleared:

inline-onemptied.html
<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>
Try It Yourself

How It Works

The browser fires emptied on the video element when its media resource is released. The inline onemptied attribute wires up the handler.

Dynamic Values with JavaScript

Attach the handler with addEventListener:

dynamic-onemptied.html
<script>
  document.getElementById("dynamicVideo").addEventListener("emptied", function () {
    console.log("Dynamic emptied event triggered!");
  });

  // Or property form:
  document.getElementById("dynamicVideo").onemptied = function () { /* … */ };
</script>
Try It Yourself

How It Works

Register the listener once at page load. When the video resource is cleared, your reset logic runs before the next fetch begins.

Example — Reload with load()

Calling load() on loaded media clears the resource and fires emptied:

onemptied-reload.html
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();
});
Try It Yourself

How It Works

load() aborts the current resource and starts fresh. Use onemptied to reset UI that depends on the previous clip.

♿ Accessibility

  • Announce reload state — If you hide native controls, use a live region when media is cleared and reloading.
  • Do not autoplay on reload — Respect user intent; let them press play after emptied.
  • Avoid alert() on emptied — Update visible status text instead of blocking dialogs.
  • Keyboard controls — Native controls support keyboard users; custom players need full keyboard support.
  • Captions persist — Clearing media may remove tracks; reattach captions when the new source loads.

🧠 How onemptied Works

1

Media was loaded

Audio or video holds a resource.

Ready
2

Reset triggered

load(), new src, or source swap.

Action
3

emptied fires

Resource released; onemptied runs.

Event
=

Clean slate for reload

Reset UI; wait for loadstart.

Browser Support

The emptied event and onemptied handler are supported in all modern browsers on <audio> and <video> elements — Chrome, Firefox, Safari, and Edge.

DOM Events · Fully supported

Universal onemptied support

All major browsers fire the underlying event and honor the onemptied handler attribute.

99% Browser support
Google Chrome Fully supported
Full support
Mozilla Firefox Fully supported
Full support
Apple Safari Fully supported
Full support
Microsoft Edge Fully supported
Full support
Internet Explorer IE 9+ supported
Full support
Opera Fully supported
Full support
onemptied attribute 99% supported

Bottom line: Use onemptied confidently on media elements; prefer addEventListener in production code.

💡 Best Practices

✅ Do

  • Reset custom player UI when emptied fires
  • Use addEventListener("emptied", …) in production code
  • Pair with loadstart and canplay for full reload flow
  • Clear duration and progress labels when media is released
  • Test reload with load() and src changes

❌ Don’t

  • Confuse emptied with seeking to the start of a clip
  • Use alert() inside media event handlers
  • Assume emptied means playback finished (use onended)
  • Attach handlers to <source> instead of the media element
  • Forget to re-enable controls after a failed reload

Conclusion

The 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.

Key Takeaways

Knowledge Unlocked

Five truths every developer should know about onemptied

Bookmark these before wiring your next media reload handler.

5
Core concepts
🌐 02

audio / video

Media only.

Scope
⚙️ 03

load()

Common trigger.

API
📝 04

addEventListener

Preferred.

Modern
05

Not seek

Not time 0.

Compare

❓ Frequently Asked Questions

It runs JavaScript when the emptied event fires — when a media element releases its current media resource.
<audio> and <video>. Attach handlers to the media element, not individual <source> tags.
When media is reset — e.g. after 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.
Yes in all modern browsers on audio and video elements.

Master media reset events

Practice the onemptied attribute with reload and source-change examples in the Try It editor.

Try onemptied demo →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

5 people found this page helpful