所以首先是想说明,你有一点点缩短了代码。它不完全是你想要的(将在下一个片段中显示)。但它所做的几乎是你想要的。点击它将红色班级切换。缺少的部分是,它不会切换所有其他按钮。
let buttons = document.querySelectorAll('button');
buttons.forEach(function(element){
\t element.addEventListener('click', function(){
\t \t if(element.classList.contains('red')){
\t \t \t \t element.classList.remove('red');
\t \t \t } else {
\t \t \t \t element.classList.add('red');
\t \t }
\t });
});
.red {
\t color: red;
}
<button>button 1</button>
<button>button 2</button>
<button>button 3</button>
所以一些解释将在代码中找到。但首先。切勿切换像red
这样的课程,但切换类似active
的课程。为什么?因为如果你的客户想要把它改成绿色,你只需要改变你的CSS
而不是JS。如果您将代码与上面的代码进行比较,则没有太大区别。除了在添加正在移除所有活动类的类活动之前,我们会做更多的工作。
这只是给你一个想法如何handle
和fire
事件。你可以做更多的事情。就像传递论据,元素或你需要的东西一样。为了获得和正确的东西反应...
let buttons = document.querySelectorAll('button');
buttons.forEach(function(element){
element.addEventListener('click', function(){
if(element.classList.contains('active')){
element.classList.remove('active');
} else {
// this is like: "Fire event on the document"
document.dispatchEvent(new CustomEvent('toggle-all-my-buttons', {}));
element.classList.add('active');
}
});
});
// here we listen on the document and can react if it gets fired no matter from where
document.addEventListener('toggle-all-my-buttons', function(){
console.log('toggle all my buttons');
buttons.forEach(function(element){
element.classList.remove('active');
});
});
.active {
color: red;
}
<button>button 1</button>
<button>button 2</button>
<button>button 3</button>
Read more about CustomEvents here
什么是错的'如果 - else'?你在'if-else'中改变了什么,除了'console.log'是什么? – caramba
我已经删除了代码中的else条件。 –
是的,它的工作原理......但其他条件有什么问题...为什么总是最后一个元素不会在这种情况下做出反应? – NeedHate