Reputation: 1422
Is there a ways in jQuery to tell which child was clicked if the onclick event was binded to the parent?
For instance:
$('#daddy').click(function () {
// if($("#son").isClicked()){return true;}
//return false;
});
and the markup looks like:
<div id="daddy">
<span id="son"></span>
<span id="daughter"></span>
</div>
Upvotes: 18
Views: 33342
Reputation: 12564
use event.target
to get the really clicked node:
$('#daddy span').on('click',function(event){
if(event.target.nodeName=='BUTTON'){//Was clicked a button
....
}
if(event.target.id=='id'){//Was clicked #id
....
}
...
});
Upvotes: 1
Reputation: 5897
This should be a different perspective at least:
$('#parent').on("click", function(evt) {
evt.stopPropagation();
if($.inArray(evt.currentTarget, $(this).children())){
console.log(evt.currentTarget);
}
});
Upvotes: 2
Reputation: 12358
check this demo out
$(function() {
$('#parent').delegate('a', 'click', function(evt) {
debugger;
evt.stopPropagation();
alert($(evt.currentTarget).attr('id'));
});
});
Upvotes: 1
Reputation: 25675
You can use the event.target to determine what was clicked:
$('#daddy').click(function (e) {
alert(e.target.id); // The id of the clicked element
});
Here's a simple example.
Upvotes: 6
Reputation: 23132
The event handler you pass to click
will receive an event
object as its first argument. The target
of the event (i.e. the element that initiated the event) will be specified there.
Here's an example from the jQuery documentation:
<!DOCTYPE html>
<html>
<head>
<style>
span, strong, p {
padding: 8px; display: block; border: 1px solid #999; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="log"></div>
<div>
<p>
<strong><span>click</span></strong>
</p>
</div>
<script>
$("body").click(function(event) {
$("#log").html("clicked: " + event.target.nodeName);
});
</script>
</body>
</html>
Upvotes: 25
Reputation: 3423
Try this for an alternative
$('#daddy span').click(function () {
var clicked = $(this).attr('id');
if(clicked == "son"){
return true;
}
return false;
});
Upvotes: 0