#javascript
#javascript
Вопрос:
Привет, мой код не добавляет «активный» класс. Пожалуйста, скажи мне. изначально все они должны быть неактивными. я разместил это здесь https://jsfiddle.net/fjmy7ce0/2 / я получаю сообщение в консоли «Не удается прочитать свойство ‘removeClass’ с нулевым значением»
let items = document.querySelector('.color__items');
let item = document.querySelectorAll('.color__item');
item.forEach(el => {
el.addEventListener('click', function(){
items.querySelector('.active').classList.
remove('active');
el.classList.add('active');
});
});
Комментарии:
1. Дэвид говорит восстановить Монику, я не нашел ответа, у меня все еще есть активный класс, и он не удален
Ответ №1:
Вы были почти на месте. Вам просто нужно использовать querySelectorAll
для всех элементов и сначала нажать удалить classes
из всех elements
Затем вам нужно event.target добавить класс только к clicked
элементу.
Живая рабочая демонстрация:
let item = document.querySelectorAll('.color__item');
item.forEach(el => {
el.addEventListener('click', function(e) {
item.forEach(el => {
el.classList.remove('active') //remove classes from all
});
e.target.classList.add('active') //add Class to the clicked element
});
});
.color__items {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 55px;
border-radius: 15px;
background-color: rgb(31, 33, 44);
margin-bottom: 60px;
}
.color__item {
width: 26px;
height: 26px;
border-radius: 35%;
border: none;
cursor: pointer;
opacity: 0.5;
transition: all .3s;
}
.color__item:hover {
opacity: 1;
}
.color__item-title {
font-size: 21px;
margin-bottom: 20px;
}
.color__item-black {
background-color: #000000;
}
.color__item-white {
background-color: #fefefe;
}
.color__item-red {
background-color: #f50818;
}
.color__item-purple {
background-color: #f508e7;
}
.color__item-blue {
background-color: #2f08f5;
}
.color__item-lightblue {
background-color: #08cbf5;
}
.color__item-green {
background-color: #08f524;
}
.color__item-yellow {
background-color: #e1f508;
}
.color__item-orange {
background-color: #f58e08;
}
.color__item.active {
opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="color__items">
<button class="color__item color__item-black" type="button"></button>
<button class="color__item color__item-white" type="button"></button>
<button class="color__item color__item-red" type="button"></button>
<button class="color__item color__item-purple" type="button"></button>
<button class="color__item color__item-blue" type="button"></button>
<button class="color__item color__item-lightblue" type="button"></button>
<button class="color__item color__item-green" type="button"></button>
<button class="color__item color__item-yellow" type="button"></button>
<button class="color__item color__item-orange" type="button"></button>
</div>
Ответ №2:
В вашем внешнем фрагменте jsfiddle у вас возникла проблема с вашим CSS:
.color__item-orange{
background-color: #f58e08;
}
} <=== SUPERFLUOUS bracket!!!
.color__item.active{
opacity: 1;
}
Ваши add
и remove
классы могут быть заменены простым toggle
. Это также сокращает код.
Ниже вы можете увидеть мою исправленную версию:
const item = [...document.querySelectorAll('.color__item')];
// delegated event attachment to the parent container:
document.querySelector('.color__items').addEventListener('click', ev=>
item.forEach(el=>el.classList.toggle('active', el==ev.target))
)
.active {background-color:red}.color__items{
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 55px;
border-radius: 15px;
background-color: rgb(31, 33, 44);
margin-bottom: 60px;
}
.color__item{ width: 26px; height: 26px; border-radius: 35%;
border: none; cursor: pointer; opacity: 0.5; transition: all .3s;
}
.color__item:hover{ opacity: 1; }
.color__item-title{ font-size: 21px; margin-bottom: 20px; }
color__item-black{ background-color: #000000; }
.color__item-white{ background-color: #fefefe; }
.color__item-red{ background-color: #f50818; }
.color__item-purple{background-color: #f508e7; }
.color__item-blue{ background-color: #2f08f5; }
.color__item-lightblue{background-color: #08cbf5;}
.color__item-green{ background-color: #08f524; }
.color__item-yellow{background-color: #e1f508; }
.color__item-orange{background-color: #f58e08; }
.active{ opacity: 1 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="color__items">
<button class="color__item color__item-black" type="button"></button>
<button class="color__item color__item-white" type="button"></button>
<button class="color__item color__item-red" type="button"></button>
<button class="color__item color__item-purple" type="button"></button>
<button class="color__item color__item-blue" type="button"></button>
<button class="color__item color__item-lightblue" type="button"></button>
<button class="color__item color__item-green" type="button"></button>
<button class="color__item color__item-yellow" type="button"></button>
<button class="color__item color__item-orange" type="button"></button>
</div>