所以首先是想說明,你有一點點縮短了代碼。它不完全是你想要的(將在下一個片段中顯示)。但它所做的幾乎是你想要的。點擊它將紅色班級切換。缺少的部分是,它不會切換所有其他按鈕。
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