最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - How can I detect a child element by clicking on a parent element? - Stack Overflow

matteradmin8PV0评论

I have a click function for a parentelement. I want to detect now if the part I clicked has the class "child"

 
$( ".parent" ).click(function() {
    if ( $( this ).hasClass( "child" ) ) {
        console.log("child");
    }   
});
.child{background-color:pink}
<script src=".1.1/jquery.min.js"></script>


 <table style="width:100%">
  <tr class="parent">
    <th>Firstname</th>
    <th>Lastname</th>
    <th class="child">Age</th>
  </tr>
</table> 

I have a click function for a parentelement. I want to detect now if the part I clicked has the class "child"

 
$( ".parent" ).click(function() {
    if ( $( this ).hasClass( "child" ) ) {
        console.log("child");
    }   
});
.child{background-color:pink}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>


 <table style="width:100%">
  <tr class="parent">
    <th>Firstname</th>
    <th>Lastname</th>
    <th class="child">Age</th>
  </tr>
</table> 

Share Improve this question edited Jan 11, 2018 at 15:56 Smern 19.1k22 gold badges77 silver badges93 bronze badges asked Jan 11, 2018 at 15:46 peace_lovepeace_love 6,47114 gold badges85 silver badges184 bronze badges 1
  • 2 Does the function only have to do something if the clicked element has the class child? If so then use event delegation and let jQuery do the work for you: $(".parent").on("click", ".child", function() { /* <this> is the clicked "child" element */ }) – Andreas Commented Jan 11, 2018 at 15:51
Add a ment  | 

2 Answers 2

Reset to default 3

access event.target, this always references the original target that created the event.

in this case the event started with the .child and bubbled up to .parent which hit this listener... at this point, this and event.currentTarget will reference the .parent element.. but target will still reference the origin element, .child.

$( ".parent" ).click(function(e) {
    if ( $( e.target ).hasClass( "child" ) ) {
        console.log("child");
    }   
});

JSFiddle Demo

Also, unless you have another reason to have the listener on .parent, you could just add the listener directly to the child like this:

$( ".parent .child" ).click(function() {
    console.log("child");
});

You can use event.target to determine the original target of the click:

$(".parent").click(function(e) {
  if ($(e.target).hasClass("child")) {
    console.log("child");
  }
});
.child {
  background-color: pink
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<table style="width:100%">
  <tr class="parent">
    <th>Firstname</th>
    <th>Lastname</th>
    <th class="child">Age</th>
  </tr>
</table>

Post a comment

comment list (0)

  1. No comments so far