I’m wondering how to handle an event inside an other one
Here is the code I use:
var title=document.getElementsByClassName('lv1');
for (var i = 0; i < title.length; i++) {
title[i].addEventListener('click', (event) => {
alert("click title");
},false);
}
var deleted=document.getElementsByClassName('remove');
for (var i = 0; i < deleted.length; i++) {
deleted[i].addEventListener('click', (event) => {
alert("click remove");
},false);
}<div class="lv1">
<h1>
test
</h1>
<button class="remove">
REMOVE
</button>
</div>You have two click events lv1 and delete. But delete is inside lv1, so when I go for delete, both click events are triggered.
On computer, I can fix this by adding a mouseover event to know if I’m hovering the delete or not and this way I know if the lv1 event must be triggered or not.
But I can’t use this trick with mobile device; the mouseover event didn’t exist.
Did I miss something?
Advertisement
Answer
You need event.stopPropagation()
var title=document.getElementsByClassName('lv1');
for (var i = 0; i < title.length; i++) {
title[i].addEventListener('click', (event) => {
alert("click title");
},false);
}
var deleted=document.getElementsByClassName('remove');
for (var i = 0; i < deleted.length; i++) {
deleted[i].addEventListener('click', (event) => {
alert("click remove");
event.stopPropagation();
},false);
}<div class="lv1">
<h1>
test
</h1>
<button class="remove">
REMOVE
</button>
</div>