Задать вопрос
selftrips
@selftrips

Как сделать зависимые радиокнопки с использованием data-*?

Как сделать чтобы часть кнопок из набора№2 становилась неактивной при выборе радио кнопки из набора№1.
name и value нельзя использовать, нужно с использованием data-type.

<!--набор№1-->
<input type="radio" name="select1" data-type1="1" value="r34324rrt">
<label>fgbrw</label>
<input type="radio" name="select1" data-type1="2" value="46y4retgrtgr">
<label>rfgbertb</label>
<input type="radio" name="select1" data-type1="3"  value="r643tgrtgrtg">
<label>gfbgb</label>
 
<!--набор№2-->
<input  data-type2="1" name="select2" type="radio" value="xуц"/>
<input  data-type2="1" name="select2" type="radio" value="sdfsdcsa"/>
<input  data-type2="2" name="select2" type="radio" value="ergewrgewrcv"/>
<input  data-type2="2" name="select2" type="radio" value="fetbewfwrethnrs"/>
<input  data-type2="3" name="select2" type="radio" value="trukfva"/>
<input  data-type2="3" name="select2" type="radio" value="sdfgsdtrb"/>

при выборе data-type1=1 становились неактивными с data-type2="2″ и data-type2="3″
при выборе data-type1=2 становились неактивными с data-type2="1″ и data-type2="3″
при выборе data-type1=3 становились неактивными с data-type2="1″ и data-type2="2″

или
при выборе data-type1=1 становись АКТИВНЫМИ data-type2=1

или
если data-* могут быть одинаковые в разных наборах, то просто везде data-type- и активные только те у которых data-type совпадает из 1 и 2 набора при выборе из 1го
  • Вопрос задан
  • 208 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Как блокировать элементы в зависимости от значения data-атрибута:

const disableByType = (elements, type) =>
  elements.forEach(n => n.disabled = n.dataset.type2 !== type);

Блокируем:

// можно сделать делегированный обработчик
document.addEventListener('change', ({ target: { dataset: { type1 } } }) => {
  if (type1) {
    disableByType(document.querySelectorAll('[data-type2]'), type1);
  }
});

// или, назначить обработчик каждой радиокнопке индивидуально
const radios1 = document.querySelectorAll('[data-type1]');
const radios2 = document.querySelectorAll('[data-type2]');
const onChange = e => disableByType(radios2, e.target.dataset.type1);

radios1.forEach(n => n.addEventListener('change', onChange));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы