Reputation: 59
I want to select only the element li
with class options
or level
in jquery
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<div class="root-head">
<ul>
<li class="level" name="name1">main</li>
<li class="level options" name="name2">
sub1
<ul class="option-selector lv1">
<li value="1">option1</li>
<li value="2">option2</li>
<li value="3">option2</li>
<li value="4">option3</li>
<li value="5">option4</li>
<li value="6">option5</li>
</ul>
</li>
<li class="level options betimes" name="name3">
sub2
</li>
<li class="level options betimes" name="name4">
sub3
</li>
</ul>
</div>
How can make the function below called only then I click on sub1
text, not all of the li
element like <li value="1">option1</li>
$("li[name=name2]").click(function () {
console.log("Funtion called");
if (/*suplimentary condition*/) {
console.log("Yes is here");
}
});
Maybe is useful the last my question!
Upvotes: 0
Views: 75
Reputation: 13222
You can check if event.target
is the same as this
.
event.target
will be the actually clicked element.this
will be the element the click function is bound too.According to the jquery docs it's a proper method of detecting event bubbling.
$("li[name=name2]").click(function(e) {
if (e.target === this) {
console.log("sub clicked");
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<div class="root-head">
<ul>
<li class="level" name="name1">main</li>
<li class="level options" name="name2">
sub1
<ul class="option-selector lv1">
<li value="1">option1</li>
<li value="2">option2</li>
<li value="3">option2</li>
<li value="4">option3</li>
<li value="5">option4</li>
<li value="6">option5</li>
</ul>
</li>
<li class="level options betimes" name="name3">
sub2
</li>
<li class="level options betimes" name="name4">
sub3
</li>
</ul>
</div>
Upvotes: 2
Reputation: 586
be more specific - give the target some uniqueness in the dom
<li class="level options" name="name2">
<div>sub1</div>
<ul class="option-selector lv1">
<li value="1">option1</li>
<li value="2">option2</li>
<li value="3">option2</li>
<li value="4">option3</li>
<li value="5">option4</li>
<li value="6">option5</li>
</ul>
</li>
$('li[name="name2"] > div').click(function () {
console.log("Funtion called");
if (/*suplimentary condition*/) {
console.log("Yes is here");
}
});
Upvotes: 1
Reputation: 2167
You have to stop the event propagation in the child li click event
$(".level").click(function () {
console.log("Funtion called");
});
$(".level ul").click(function (e) {
e.stopPropagation();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<div class="root-head">
<ul>
<li class="level" name="name1">main</li>
<li class="level options" name="name2">
sub1
<ul class="option-selector lv1">
<li value="1">option1</li>
<li value="2">option2</li>
<li value="3">option2</li>
<li value="4">option3</li>
<li value="5">option4</li>
<li value="6">option5</li>
</ul>
</li>
<li class="level options betimes" name="name3">
sub2
</li>
<li class="level options betimes" name="name4">
sub3
</li>
</ul>
</div>
Upvotes: 2