References

Beginner-friendly references for web development, with live, editable examples.

The HTML ondrop event

Event All modern browsers Updated
Quick answer

The HTML ondrop attribute runs JavaScript when an item is dropped on a valid drop target. It is an inline handler for the drop event; in modern code prefer addEventListener('drop', …).

Overview

The ondrop event attribute runs JavaScript when an item is dropped on the element. In JavaScript the event itself is named drop — drop the on prefix when you call addEventListener.

It is part of the native HTML drag-and-drop API. The handler receives a DragEvent whose dataTransfer object carries the dragged data. One rule trips everyone up: you must call event.preventDefault() in the ondragover handler of a target, or it will not accept a drop.

You can wire this up with the inline ondrop HTML attribute, but the modern, recommended approach is element.addEventListener('drop', handler) in JavaScript. That keeps behavior out of your markup, lets you attach several handlers to the same event, and makes them easy to remove. The inline attribute is fine for quick demos.

Syntax

<element ondrop="handler()">…</element>

element.addEventListener('drop', handler);

Best practices

  • Prefer element.addEventListener('drop', handler) over the inline ondrop attribute — it separates behavior from markup and allows multiple handlers.
  • Call preventDefault() in ondragover so the element can act as a drop target.
  • Set and read the payload through event.dataTransfer.
  • Provide a keyboard-accessible alternative — native drag-and-drop is hard to use without a mouse.

Accessibility

Native drag-and-drop cannot be operated by keyboard, so any feature built on ondrop must provide an equivalent button- or menu-based alternative.

Frequently asked questions

What is the ondrop event?
It runs JavaScript when an item is dropped on the element. In JavaScript the event is named drop.
Why is my drop not working?
You must call event.preventDefault() in the ondragover handler, otherwise the element rejects the drop.
How do I pass data between dragged and dropped elements?
Use event.dataTransfer.setData() when the drag starts and getData() when it drops.
Should I use the ondrop attribute or addEventListener?
Prefer addEventListener('drop', …) in JavaScript. The inline ondrop attribute works but mixes behavior into the markup and allows only one handler per element.