Jquery Event Delegation With .on (this Reference)
Solution 1:
Change it to this...
$('#foo').on('click', '.bar', function() {
console.log(this);
});
Now this
will be the clicked .bar
.
If you want a jQuery object then use $(this)
as normal.
Edit
As per the change to question code, you'll need this...
$('#foo').on('click', '.bar a'), function() {
console.log(this);
});
That simply extends the click event handler to links inside .bar
elements that may not exist at document.ready.
Solution 2:
Two ways.
Use a string selector, not a jQuery object, when calling
.on()
:$('#foo').on('click', '#bar', function() { console.log(this); // #bar });
Specify a parameter name for the jQuery normalised event object, and use its
target
property:$('#foo').on('click', $('#bar'), function(e) { console.log(this); // #fooconsole.log(e.target); // #bar });
EDIT: Ignore the second option. jQuery doesn't accept a jQuery object for the selector, and as a result simply ignores it. You will not be setting up event delegation, you'd instead just be setting a static click
event handler on #foo
, which works due to event propagation.
Solution 3:
An ID should be used once in a page. So you can add a class fooClass
to your 5 elements and do :
$('.fooClass').onclick(function() {
alert("my bar element: " + $(this));
});
and do what you want with $(this)
.
Post a Comment for "Jquery Event Delegation With .on (this Reference)"