jQuery event.currentTarget

Beginner
⏱️ 10 min read
📚 Updated: Jul 2026
🎯 5 Examples
🚀 5 Try-it labs
Event object · jQuery 1.3+

What You’ll Learn

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

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.

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

📝 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
});

⚡ Quick Reference

ReferencePoints toChanges while bubbling?
event.currentTargetElement whose handler runs nowYes — each handler sees itself
thisUsually same; delegate = matched childPer handler
event.targetDeepest event originNo — fixed for the event
$(event.currentTarget)jQuery wrapper for handler ownerPer handler

📋 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

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
});
Try It Yourself

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.

jQuery
$( "#list" ).on( "click", "li", function ( event ) {
  console.log( "currentTarget id:", event.currentTarget.id ); // "list"
  console.log( "this tag:", this.tagName );                   // "LI"
});
Try It Yourself

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.

jQuery
$( "#save" ).on( "click", function ( event ) {
  console.log( "target:", event.target.tagName );           // "SPAN"
  console.log( "currentTarget:", event.currentTarget.id );  // "save"
});
Try It Yourself

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: thiscurrentTarget

Official docs: with scope manipulation, this is your context object — event.currentTarget stays the DOM element.

jQuery
var app = { name: "MyApp" };

$( "button" ).on( "click", $.proxy( function ( event ) {
  console.log( "this.name:", this.name );                         // "MyApp"
  console.log( "currentTarget:", event.currentTarget.tagName );     // "BUTTON"
  console.log( "equal?", event.currentTarget === this );           // false
}, app ) );
Try It Yourself

How It Works

jQuery.proxy(fn, context) forces this inside fn to be context. The event system still sets event.currentTarget to the element whose listener executed.

Example 5 — Bubbling: each handler sees itself as currentTarget

Handlers on nested elements log different currentTarget values; target stays the inner node.

jQuery
$( "#outer, #inner" ).on( "click", function ( event ) {
  console.log(
    event.currentTarget.id,
    "target=" + event.target.id
  );
});
// click #inner → logs "inner target=inner" then "outer target=inner"
Try It Yourself

How It Works

As the event bubbles, each handler’s currentTarget updates to that handler’s element. event.target remains the original inner element for both logs.

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

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

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 Chrome All versions · Desktop & Mobile
Full support
Mozilla Firefox All versions · Desktop & Mobile
Full support
Apple Safari All versions · macOS & iOS
Full support
Microsoft Edge All versions · Chromium & Legacy
Full support
Internet Explorer IE 6+ · Legacy environments
Full support
Opera All modern versions
Full support
currentTarget DOM Event

Bottom line: Prefer currentTarget over this when scope may change.

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.

💡 Best Practices

✅ Do

  • 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

Key Takeaways

Knowledge Unlocked

Five things to remember about event.currentTarget

Handler owner during bubbling.

5
Core concepts
this 02

Usually equal

Direct bind

Rule
T 03

target

Origin node

Compare
li 04

Delegate

Parent vs row

Pattern
.proxy 05

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.

Next: event.target

Learn which DOM element initiated the event — essential for delegation and nested clicks.

event.target tutorial →

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.

6 people found this page helpful