JavaScriptでクリックしたボタンの色を変える方法

22 回閲覧されました
みなさんこんにちは、jonioです。
今回はボタンが並んでいてクリックするとクリックしたボタンの背景色が変わって他のボタンを押せなくなり同じボタンをもう一度押すと他のボタンを押せるようになる方法を解説します。
デモ
下記になります。
HTMLとCSS
下記になります。
//HTML
<ul class="category-list">
<li>食費</li>
<li>日用品</li>
<li>交際費</li>
<li>本・雑誌</li>
<li>携帯電話・インターネット</li>
<li>医療費</li>
<li>交通費</li>
<li>水道・電気・ガス</li>
<li>家賃</li>
</ul>
//CSS
.category-list {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 2px;
list-style: none;
margin: 0;
padding: 0;
}
.category-list li{
background-color: #e0e0e0;
padding: 10px;
text-align: center;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
border:none;
}
.selected{
background-color:#9acd32!important;
color:#fff;
}
.click-button{
background-color: #9acd32!important;
color: white;
border:none;
}
JavaScript
下記になります。
const category_lists = document.querySelectorAll('.category-list li');
let select_category_flag = false;
category_lists.forEach(item => {
item.addEventListener('click', (e) => {
if (item.classList.contains('click-button')) {
item.classList.remove('click-button');
select_category_flag = false;
} else if (!select_category_flag) {
category_lists.forEach(e => e.classList.remove('click-button'));
item.classList.add('click-button');
select_category_flag = true;
}
});
});
JavaScriptのコードの意味を説明します。
1行目で全てのliタグ(ボタン)に対してクリックが適用できるようにします。
2行目はボタンを選択したかのフラグです。
5行目からがボタンをクリックした時です。
6行目〜9行目はどれかのボタンを既にクリックしている場合です。
ボタンに色を付ける.click-buttonを外してクリックしてないボタンをクリックしても色が付かなくしています。
そしてボタンをクリックできないようにする為にフラグをfalseにします。
10行目〜16行目がボタンをまだクリックしてない時です。
11行目で全てのボタンに色が付いてない状態にして13行目で選択したボタンだけ色を付けます。
そして15行目でフラグをtrueにしてボタンを選択した状態にします。