👀 Live Preview
Drag the box into the drop zone. dragenter highlights the target:
Waiting for dragenter…

The ondragenter attribute is an inline event handler that runs JavaScript when the dragenter event fires on a drop target. That happens when a dragged item’s pointer crosses into the target element’s boundary—including when moving over nested descendants. It is part of the HTML Drag and Drop API: pair a draggable="true" source with a receiver that listens for dragenter, dragover, dragleave, and drop. Use ondragenter mainly for visual feedback (highlighting the zone). To allow a drop, call event.preventDefault() in dragover—not because dragenter always requires it. For production sites, prefer addEventListener("dragenter", …) over inline handlers.
Inline JS.
On drop target.
Visual feedback.
Enter vs hover.
Preferred way.
Nested children.
ondragenter AttributeThe primary purpose of ondragenter is to define what happens when a dragged item enters a drop target. Common uses include adding a highlight class, updating a status label (“Release to drop”), or playing a subtle animation so users know the zone is active. It connects pointer movement over a receiver to JavaScript feedback without a full page reload.
Do not confuse ondragenter with ondragstart or ondragend—those fire on the source being dragged. dragenter fires on the target when the pointer crosses its boundary. dragover fires repeatedly while hovering and is where preventDefault() enables dropping. dragleave fires when leaving the boundary; pair it with dragenter to remove highlights. Avoid alert() in handlers; update visible status text instead.
Browsers block drops unless the target calls event.preventDefault() during dragover. dragenter is for highlighting—do not assume it must always call preventDefault(). Production code should use element.addEventListener("dragenter", handler).
Set ondragenter on a drop target or assign element.ondragenter:
<script>
function handleDragEnter(event) {
document.getElementById("dropZone").classList.add("over");
document.getElementById("status").textContent = "dragenter — pointer entered zone.";
}
</script>
<div draggable="true">Drag me</div>
<div id="dropZone" ondragenter="handleDragEnter(event)">Drop zone</div>
<p id="status"></p>dragenter fires on the drop target, not on the draggable source.draggable="true" source with handlers on the receiver.event.preventDefault() in dragover on the target to allow drop.dragenter can fire multiple times when moving over nested children—use a counter or relatedTarget checks.element.ondragenter = function(event) { … }.element.addEventListener("dragenter", handler).The ondragenter attribute accepts a string of JavaScript code:
ondragenter="handleDragEnter(event)" — Call a named function with the event object.ondragenter="this.classList.add('over')" — Inline statement to highlight the target.zone.ondragenter = (e) => { … } assigns the handler.ondragleave or a counter to remove highlight when the pointer exits.const zone = document.getElementById("dropZone");
let enterCount = 0;
zone.addEventListener("dragenter", (event) => {
enterCount += 1;
zone.classList.add("over");
document.getElementById("status").textContent =
"dragenter — entered drop zone.";
});
zone.addEventListener("dragleave", (event) => {
enterCount -= 1;
if (enterCount === 0) zone.classList.remove("over");
});
zone.addEventListener("dragover", (event) => {
event.preventDefault();
});
document.getElementById("dropZone").ondragenter = function (event) {
console.log("Pointer entered target.");
};| Event | When it fires | Handler |
|---|---|---|
dragenter | Pointer enters target boundary | ondragenter |
dragover | Repeatedly while over target | ondragover |
dragleave | Pointer leaves target boundary | ondragleave |
drop | Item released on valid target | ondrop |
preventDefault | Required in dragover to allow drop | Not required in dragenter for highlighting |
| Nested children | dragenter/dragleave may fire repeatedly | Use enter counter pattern |
| Target | Supported? | Notes |
|---|---|---|
<div>, <section> | Yes | Common drop zones; no draggable needed on target |
<ul>, <li> | Yes | Sortable lists; watch nested dragenter events |
<td>, <th> | Yes | Table cell drop targets |
<article>, <main> | Yes | Large layout drop areas |
| Draggable source | Separate | Set draggable="true" on source; use ondragstart there |
ondragenter vs ondragover vs ondragleave vs ondrop| Handler | When it fires | Element | Typical use |
|---|---|---|---|
ondragenter | Boundary entered (once per crossing) | Drop target | Highlight zone, show “drop here” status |
ondragover | Repeatedly while hovering | Drop target | preventDefault() to allow drop; continuous feedback |
ondragleave | Boundary left | Drop target | Remove highlight; pair with dragenter |
ondrop | Once when released on valid target | Drop target | Accept payload, move DOM node, update data |
Inline ondragenter highlighting a drop zone, dynamic element.ondragenter assignment, and comparing dragenter vs dragover vs dragleave on a target.
Drag the box into the drop zone. dragenter highlights the target:
Waiting for dragenter…
Highlight the target when a draggable item enters its boundary:
<div draggable="true">Drag me</div>
<div id="dropZone" ondragenter="handleDragEnter(event)">Drop zone</div>
<p id="msg"></p>
<script>
function handleDragEnter(event) {
document.getElementById("dropZone").classList.add("over");
document.getElementById("msg").textContent = "dragenter — entered drop zone.";
}
</script>The browser fires dragenter on the drop target when the dragged item crosses its boundary. The inline ondragenter attribute calls your highlight function.
Assign the handler with element.ondragenter or addEventListener:
<script>
document.getElementById("dynamicDropTarget").ondragenter = function (event) {
document.getElementById("log").textContent =
"Dynamic dragenter — pointer entered target.";
event.currentTarget.classList.add("over");
};
// Or preferred form:
document.getElementById("dynamicDropTarget").addEventListener("dragenter", handler);
</script>Register the listener once at page load. When the pointer enters the drop target during a drag, your handler runs on the receiver element.
On a drop target, dragenter and dragleave fire on boundary changes; dragover fires continuously while hovering:
target.addEventListener("dragenter", () => { log("dragenter (boundary entered)"); });
target.addEventListener("dragover", (e) => {
e.preventDefault();
log("dragover (while hovering)");
});
target.addEventListener("dragleave", () => { log("dragleave (boundary left)"); });
target.addEventListener("drop", () => { log("drop (released on target)"); });Put highlight logic in ondragenter and cleanup in ondragleave on the target. Put preventDefault() in dragover and receive logic in ondrop.
aria-live regions when dragenter highlights a zone so screen reader users get feedback.dragstart fires on draggable source.
dragenter fires on drop target boundary.
dragover fires repeatedly; call preventDefault.
drop on release; dragleave when exiting boundary.
The dragenter event and ondragenter handler are part of the HTML Drag and Drop API and supported in all modern browsers — Chrome, Firefox, Safari, and Edge. Touch drag behavior may differ; test on your target devices.
ondragenter supportAll major browsers fire the underlying event and honor the ondragenter handler attribute.
Bottom line: Universal support for dragenter on drop targets. Pair with dragover + preventDefault() and a draggable source.
ondragenter.The ondragenter attribute runs JavaScript when a dragged item enters a drop target and the dragenter event fires on the receiver. Use it for highlighting and status feedback—not as a substitute for dragover + preventDefault() when you need to allow drops.
Prefer addEventListener("dragenter", …), pair with ondragleave or a counter pattern, call preventDefault() in dragover, and offer keyboard alternatives for accessibility.
ondragenterBookmark these before wiring your next event handler.
dragenter on receiver.
EventPointer crosses in.
BehaviorVisual feedback.
Use casePreferred.
ModernEnter vs hover.
Comparedragenter event fires on a drop target—when a dragged item’s pointer enters that element’s boundary.event.preventDefault() in dragover on the drop target to allow dropping. dragenter is mainly for visual feedback and highlighting.ondragenter fires when the pointer crosses into the target boundary. ondragover fires repeatedly while hovering and is where preventDefault() enables drop.element.addEventListener("dragenter", …). Inline ondragenter works for simple demos.dragenter and dragleave on the parent repeatedly. Use an enter counter or check event.relatedTarget with dragleave to keep highlight state stable.draggable="true" goes on the source being dragged. The drop target only needs dragenter, dragover, dragleave, and drop handlers.Practice inline ondragenter, addEventListener, dragenter vs dragover, and the counter pattern in the Try It editor.
5 people found this page helpful