Переключение класса при клике

77
31 октября 2021, 23:50

Есть такая структура:

<div class="trading__nav-active" >
  <nav>
    <input class="RadioTab" name="odin" type="radio" id="CoinVal_1" checked="checked" onclick = 'CoinValChange("CoinVal_1");'/>
    <label for="CoinVal_1" >1</label>                                                                                       
    <input class="RadioTab" name="odin" type="radio" id="CoinVal_2" onclick = 'CoinValChange("CoinVal_2");'/>
    <label for="CoinVal_2">2</label>    
  </nav>
</div>

Как сделать, чтобы каждый раз при клике на label, текущий элемент подсвечивался или выделялся цветом, а предыдущий возвращался в исходное состояние?

Answer 1

Тут просто напрашивается CSS...

/* .RadioTab {display: none;} */ 
 
label { 
  display: inline-block; 
  width: 100px; 
  background-color: #ddd; 
  padding: 5px; 
  text-align: center; 
  cursor: pointer; 
} 
 
.RadioTab:checked + label { 
  border-bottom: 3px solid orange; 
}
<div class="trading__nav-active"> 
  <nav> 
    <input class="RadioTab" name="odin" type="radio" id="CoinVal_1" checked="checked"> 
    <label for="CoinVal_1">1</label> 
     
    <input class="RadioTab" name="odin" type="radio" id="CoinVal_2"> 
    <label for="CoinVal_2">2</label> 
  </nav> 
</div>

А на JS можно записать так, уже независимо от радиокнопок:

let test = document.querySelectorAll('.test'); // Возвращает список элементов 
let lastClicked = test[0]; // Первый элемент из списка (счет начинается с нуля) 
 
for( let i = 0; i < test.length; i++ ){ 
  // Цикл берет и кругами выполняет код. На каждом круге, i является конкретным числом. 
  // Добавляется событие 'клик' на test[0], потом test[1], test[2]... 
  test[i].addEventListener('click', function(){ 
    lastClicked.classList.remove('active'); 
    this.classList.add('active'); 
    // Убрали класс с предыдущего кликнутого элемента, добавили на текущий 
     
    lastClicked = this;  
    // Обновили значение переменной - теперь она ссылается на текущий элемент.  
    // Чтобы на следующем клике, убрать класс уже с этого. 
  }); 
}
.test { 
  display: inline-block; 
  width: 100px; 
  background-color: #ddd; 
  padding: 5px; 
  text-align: center; 
  cursor: pointer; 
} 
 
.test.active { 
  border-bottom: 3px solid orange; 
}
<label class="test">1</label> 
<label class="test">2</label> 
<label class="test">3</label> 
<label class="test">4</label> 
<label class="test">5</label>

Учебник JS → http://learn.javascript.ru/

READ ALSO
Пытаюсь сделать &#39;Пятнашки&#39; столкнулся с проблемой

Пытаюсь сделать 'Пятнашки' столкнулся с проблемой

при нажатии на верхний ряд или нижний, выдает ошибку (Uncaught TypeError: Cannot read property '3' of undefined), и кубик не передвигается

104
Поиск в большом тексте

Поиск в большом тексте

Есть у меня большой текст и моя задача в том чтобы при вводе что-то в поле ввода программа начала искать совпадения с текстом и возвращала...

104
Валидаций двух и более обьектов в WPF (Validation WPF)

Валидаций двух и более обьектов в WPF (Validation WPF)

У меня в диалогом окне есть 5 элементов xaml texbox у каждый элемент имеет свою валидацию

124