Reputation: 11
I would like to make the <li>
element to change the class when I click on it, and when I click one more time to remove it. I have used simple code like this :
var ul = document.querySelector("ul");
ul.addEventListener("click", function() {
var li = document.querySelector("li");
li.classList.add("done");
})
ul.addEventListener("dblclick", function() {
var li = document.querySelector("li");
li.classList.toggle("done");
})
so as you can see on click it goes on and on dbl click it goes off, but it is working on all the <li>
elements at once.
Upvotes: 1
Views: 508
Reputation: 45
Make sure to select the right element when you click on it using event.target
.
<ul id="my-list">
<li>Item #1</li>
<li>Item #2</li>
<li>Item #3</li>
</ul>
const list = document.querySelector('#my-list');
list.addEventListener('click', (event) => {
// The clicked element
const target = event.target;
// Make sure the clicked element is an <li> element
if (target instanceof HTMLLIElement) {
// Toggle class
target.classList.toggle('done');
}
});
Useful documentation: https://developer.mozilla.org/en-US/docs/Web/API/Event/target
Upvotes: 0
Reputation: 7180
You have set the event listener on the UL, which will impact all LI inside. Another options - you can set the event listener on the LI instead.
var lis = document.querySelectorAll("li");
lis.forEach(li => {
li.addEventListener("click", function(ev){
ev.target.classList.add("done");
})
li.addEventListener("dblclick", function(ev) {
ev.target.classList.remove("done");
})
});
li {
color: lightgray;
}
li.done {
color: green;
}
li {
cursor: pointer;
}
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
https://jsfiddle.net/3jcbaqgu/17/
Upvotes: 0
Reputation: 5348
You need to apply the class to the event's target.
var ul = document.querySelector("ul");
ul.addEventListener("click", (e) => {
e.target.classList.add("done");
});
ul.addEventListener("dblclick", (e) => {
e.target.classList.toggle("done");
});
.done {
background: green;
}
<ul>
<li>A</li>
<li>A</li>
<li>A</li>
<li>A</li>
<li>A</li>
</ul>
Upvotes: 2