event.currentTarget is the DOM element whose handler is running during the bubbling phase. This tutorial covers the official equals-this demo, comparison with event.target, delegation on parent lists, jQuery.proxy scope, and styling the handler owner safely.
01
Property
event.currentTarget
02
this
Usually equal
03
target
Event origin
04
Delegate
Parent context
05
.proxy
Scope differs
06
Since 1.3
Native + jQuery
Fundamentals
Introduction
Every time you bind .on("click", function (event) { ... }), jQuery passes an event object. Among its properties, event.currentTarget answers a precise question: which element’s listener is executing right now? That matters when buttons contain icons, lists use delegation, or you wrap handlers with custom scope.
The official jQuery API documents event.currentTarget since version 1.3. In the common case it equals this inside the handler. When you use jQuery.proxy or other scope manipulation, this follows your chosen context — but event.currentTarget always points at the element running the handler.
Concept
Understanding event.currentTarget
During event bubbling, the browser invokes handlers from the target element up through ancestors. At each step, event.currentTarget is set to the element whose listener is running:
Direct binding — $("#btn").on("click", fn) → currentTarget is #btn.
Delegation — $("#list").on("click", "li", fn) → currentTarget is #list; this is the matched li.
Bubbling chain — each ancestor handler sees itself as currentTarget.
vs target — event.target stays the deepest origin element for every handler on the path.
💡
Beginner Tip
When in doubt, log all three: console.log(event.target, event.currentTarget, this). You will quickly see which reference matches the element you want to style or read data from.
Foundation
📝 Syntax
Official jQuery API form (since 1.3):
jQuery
event.currentTarget
// read inside any .on() handler:
function handler( event ) {
var el = event.currentTarget;
$( event.currentTarget ).addClass( "active" );
}
// official demo:
$( "p" ).on( "click", function ( event ) {
alert( event.currentTarget === this ); // true
});
Type
Element — a native DOM element (same type as this in a normal handler).
Return value
Not a method — a read-only property on the event object passed to your handler.
Always defined when jQuery invokes your callback for a DOM event.
Official jQuery API example
jQuery
$( "p" ).on( "click", function ( event ) {
alert( event.currentTarget === this ); // true
});
Cheat Sheet
⚡ Quick Reference
Reference
Points to
Changes while bubbling?
event.currentTarget
Element whose handler runs now
Yes — each handler sees itself
this
Usually same; delegate = matched child
Per handler
event.target
Deepest event origin
No — fixed for the event
$(event.currentTarget)
jQuery wrapper for handler owner
Per handler
Compare
📋 currentTarget vs this vs target
Three references beginners mix up — use the right one for each job.
currentTarget
event.currentTarget
Handler owner (stable with .proxy)
this
$(this)
Matched element / scope
target
event.target
Click origin (deepest node)
Delegate
.on("click","li",fn)
CT=parent, this=li
Hands-On
Examples Gallery
Example 1 follows the official jQuery demo. Examples 2–5 cover delegation, target vs currentTarget, jQuery.proxy, and highlighting the handler element during bubbling.
📚 Official jQuery Demo
Verify that currentTarget equals this on a direct binding.
Example 1 — Official Demo: currentTarget === this
Official jQuery demo — click any paragraph to confirm event.currentTarget === this is true.
jQuery
$( "p" ).on( "click", function ( event ) {
alert( event.currentTarget === this ); // true
});
Click a paragraph → alert shows "true"
event.currentTarget and this refer to the same <p> element
How It Works
jQuery sets this to the element the handler is bound to. The normalized event object exposes the same element as event.currentTarget — the official equality check documents that relationship.
Example 2 — Delegation: currentTarget is the parent
With $("#list").on("click", "li", fn), currentTarget is #list while this is the clicked li.
currentTarget id: list
this tag: LI
Use $(this) to style the row; currentTarget is the ul#list
How It Works
Delegation attaches one listener on the parent. jQuery filters events to matching children — this becomes the child, but event.currentTarget remains the element you called .on() on.
📈 Practical Patterns
Nested markup, custom scope, and bubbling.
Example 3 — vs event.target: click inner span
Click the icon inside a button — target is the span; currentTarget on the button handler is the button.
target: SPAN (the icon you clicked)
currentTarget: save (the button handler owner)
Use currentTarget to style the whole button reliably
How It Works
event.target identifies where the pointer event originated. event.currentTarget identifies which handler runs — the button you bound to, not the nested icon.
Example 4 — jQuery.proxy: this ≠ currentTarget
Official docs: with scope manipulation, this is your context object — event.currentTarget stays the DOM element.
As the event bubbles, each handler’s currentTarget updates to that handler’s element. event.target remains the original inner element for both logs.
Applications
🚀 Common Use Cases
Highlight handler owner — $(event.currentTarget).addClass("active") when nested children should not break styling.
Delegation debugging — log currentTarget vs this to verify parent vs row behavior.
Proxy-safe handlers — read the clicked element via event.currentTarget when this is an app object.
Stop propagation decisions — know which listener runs before calling event.stopPropagation().
Compare with target — ignore clicks on disabled inner nodes with event.target === event.currentTarget.
Unit tests — assert handler context without relying on mutable this binding.
🧠 How event.currentTarget Is Set
1
User action
Browser fires a native event — click, keydown, etc. — starting at the deepest element (target).
Event
2
jQuery invokes handler
Your .on() callback runs; jQuery sets this and copies native currentTarget onto the event object.
Handler
3
Bubbling continues
Parent handlers run next — each sees itself as currentTarget while target stays fixed.
Bubble
4
✓
Read the property
Use event.currentTarget whenever you need the handler owner regardless of this scope tricks.
Important
📝 Notes
Available since jQuery 1.3 — mirrors the native DOM Event.currentTarget property.
Typically equals this unless scope is manipulated with jQuery.proxy or similar.
With delegation, currentTarget is the delegated parent; this is the matched child selector.
Do not confuse with event.target — target is the origin; currentTarget is the listener owner.
Read-only — assign to a variable if you need the element after async code runs.
Works with all event types bound through jQuery — not limited to mouse events.
Compatibility
Browser Support
event.currentTarget is a standard DOM Event property exposed on jQuery’s normalized event object since jQuery 1.3+. It behaves consistently anywhere jQuery runs — the property reflects the element whose handler is executing during the bubbling phase.
✓ jQuery 1.3+ · DOM standard
jQuery event.currentTarget
Handler context during bubbling — stable when this is not.
100%Universal
Google ChromeAll versions · Desktop & Mobile
Full support
Mozilla FirefoxAll versions · Desktop & Mobile
Full support
Apple SafariAll versions · macOS & iOS
Full support
Microsoft EdgeAll versions · Chromium & Legacy
Full support
Internet ExplorerIE 6+ · Legacy environments
Full support
OperaAll modern versions
Full support
currentTargetDOM Event
Bottom line: Prefer currentTarget over this when scope may change.
Wrap Up
Conclusion
event.currentTarget is the DOM element whose handler runs during the bubbling phase. The official demo shows it equals this in plain handlers; delegation and jQuery.proxy are the main cases where they diverge.
Pair currentTarget with event.target when nested markup matters, and reach for $(event.currentTarget) when you need a jQuery wrapper without guessing at this.
Use event.currentTarget when this may be proxied or rebound
Style the whole control with $(event.currentTarget) on nested buttons
Log target, currentTarget, and this while learning delegation
Use $(this) on delegated rows — it is the matched child
Store var el = event.currentTarget before async callbacks
❌ Don’t
Assume event.target === event.currentTarget on buttons with icons
Assume this === event.currentTarget after jQuery.proxy
Use currentTarget to mean the clicked row under delegation — use this
Mutate event.currentTarget — it is read-only
Confuse with CSS :current or jQuery :target selector
Summary
Key Takeaways
Knowledge Unlocked
Five things to remember about event.currentTarget
Handler owner during bubbling.
5
Core concepts
CT01
currentTarget
Handler owner
API
this02
Usually equal
Direct bind
Rule
T03
target
Origin node
Compare
li04
Delegate
Parent vs row
Pattern
.proxy05
Scope
this differs
Edge
❓ Frequently Asked Questions
event.currentTarget is the DOM element whose event handler is currently executing during the bubbling phase. It tells you which listener is running right now. Available since jQuery 1.3 as part of the normalized event object.
In a normal handler they are equal — event.currentTarget === this is true. If you use jQuery.proxy or bind with an explicit context, this becomes your chosen object while event.currentTarget stays the element running the handler.
event.target is where the event started — the deepest element clicked or interacted with. event.currentTarget is the element whose handler is running as the event bubbles. Click a span inside a button: target is the span; currentTarget on the button handler is the button.
When you use $('#list').on('click', 'li', fn), event.currentTarget is the list element you bound to. this inside fn is the li that matched the selector. event.target may be a child inside that li. Use this or $(this) to act on the row; use currentTarget when you need the delegated parent.
For direct bindings without scope tricks, they are equivalent. Prefer event.currentTarget when this might be overridden — jQuery.proxy, arrow functions in classes, or handlers passed to other APIs. Both wrap the same element in typical .on() handlers.
Yes. Each handler on the bubble path sees its own element as currentTarget. A click on a nested span runs the span handler first (currentTarget = span), then parent handlers with currentTarget set to each ancestor in turn. target stays the span for all of them.
Did you know?
The DOM specification defines currentTarget only while a handler is running — outside the callback it is null. jQuery copies the value onto its event object during your handler so you can safely pass event to other functions and still read event.currentTarget before the stack unwinds.