Как переключить переключатель с меткой

Я хотел бы отменить выбор переключателя, когда я нажимаю на метку, и следующий код работает, как и ожидалось, только если я нажимаю на саму кнопку.

Как связать поведение метки с кнопкой?

<label>
<input type = "radio" name = "choice" value = "HTML" onMouseDown = "this.__chk = this.checked" onClick = "if (this.__chk) this.checked = false" /> Learn HTML 
</label>

<label>
<input type = "radio" name = "choice" value = "Java" onMouseDown = "this.__chk = this.checked" onClick = "if (this.__chk) this.checked = false"/> Learn JavaScript 
</label>

Почему вы хотите использовать переключатели, если вы хотите снять их по щелчку? Для этого есть галочки.

Zsolt Meszaros 18.12.2020 18:17

Это потому, что я не хочу, чтобы оба варианта были выбраны одновременно. Другими словами, это только одна возможность с возможностью отменить выбор, если это необходимо.

Xtof 19.12.2020 10:45
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
1
2
1 783
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

  1. используйте атрибут for в метке
<label for='idHTML'>Learn HTML </label>
  1. дать радио эквивалент идентификатора
<input id='idHTML' type = "radio" name = "choice" />

Он не отвечает на вопрос, он работает так же, как и тот, о котором идет речь выше.

Zsolt Meszaros 18.12.2020 18:18

Ваши прослушиватели событий onMouseDown и onClick не имеют смысла. Я создал еще один пост, если вы могли бы проверить его.

XMehdi01 18.12.2020 19:16

Вы должны изменить свой другой пост тогда.

Mr. Polywhirl 18.12.2020 19:24

Что ты имеешь ввиду под этим.__chk

onMouseDown = "this.__chk = this.checked"
onClick = "if (this.__chk) this.checked = false"

Если вы хотите выбрать только один, вы можете использовать просто тип радио с группировкой опций с одним именем = «выбор»

Если вы хотите проверить и снять отметку с нескольких вариантов, вы можете использовать флажок

Радиокнопки работают не так, как вы думаете. Чтобы отменить выбор одного, вам нужно либо выбрать другой с тем же атрибутом name, либо сбросить форму. Функциональность, которую вы описываете, больше подходит для флажка, чем для переключателя. См. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio для спецификаций. Вы также можете взглянуть на этот вопрос / ответ: Сбросить определенный элемент ввода в HTML-форме.

Кроме того, нет необходимости оборачивать тег label вокруг ввода. Атрибут for отвечает за связь.

Если вы хотите отменить выбор радиокнопки, вам нужно будет сбросить форму.

form {
  display: flex;
  flex-direction: column;
}
<form>
  <label for = "ckb-01">
    <input id = "ckb-01" type = "radio" name = "choice" value = "HTML" />
    Learn HTML
  </label>
  <label for = "ckb-02">
    <input id = "ckb-02" type = "radio" name = "choice" value = "Java" />
    Learn JavaScript
  </label>
  <label for = "ckb-03">
    <input id = "ckb-03" type = "radio" name = "choice" value = "Java" />
    Learn CSS
  </label>
  <input type = "reset" />
</form>
Ответ принят как подходящий

После многих попыток мне наконец удалось закодировать рабочее решение с помощью некоторого javascript.

Проблема в том, что как только переключатель нажат, его состояние меняется. предыдущее значение должно быть сохранено, чтобы знать, должно ли оно быть отменено или нет.

<main id = "form">
    <label >
      <input type = "radio" name = "rad" id = "Radio0" />Learn Html
    </label>
    <br><br>
    <label>
      <input type = "radio" name = "rad" id = "Radio1" />Learn CSS
    </label>
    <br><br>
    <label>
      <input type = "radio" name = "rad" id = "Radio2" />Learn Java
    </label>
</main>



<script>
    let buttons = document.querySelectorAll('#form input');
    for (button of buttons){
        button.dataset.waschecked = "false";
        button.addEventListener('click', myFunction, false);
    }


function myFunction(e) {
  if (e.originalTarget.dataset.waschecked == "false"){
    
    for (button of document.querySelectorAll('#form input')){
        button.dataset.waschecked = "false";
    }
    e.originalTarget.dataset.waschecked = "true";
    e.originalTarget.checked =true;
  }else {
    for (button of document.querySelectorAll('#form input')){
        button.dataset.waschecked = "false";
    }
    e.originalTarget.checked =false;
  }
}
</script>

Приветствуются любые предложения по улучшению этого кода.

Другие вопросы по теме