Проверка с возвратом input[type="radio"] всегда ложна

У меня есть input[type = "radio"] без отмеченной опции по умолчанию, и мне нужно вернуть false, если ни одна из этих опций не отмечена.

Я изучаю только javascript, поэтому jquery, angular или любой другой будет полезен (на данный момент). Я могу перебрать radioObj и выбрать его значение, но я не могу вернуть false, если ни одна из опций не отмечена (на самом деле, я не могу вернуть true)

не совсем то, что у меня, но...

<input type = "radio" id = "rd1" name = "radioGrp">opt1
<br>
<input type = "radio" id = "rd2" name = "radioGrp">opt2

а в JS у меня...

var rdObj = document.getElementByName("radioGrp");
var selectedValue;

for (var i = 0, length = rdObj.length; i < length; i++){
if (!rdObj[i].checked){
        alert("Select one option");
        return false;
    }else{
        //do something with value of radio checked value
    }
}

Этот код всегда дает мне alert("Select one option"), независимо от того, выбираю ли я один вариант или нет. Необходимость валидации.

Любой хел будет очень признателен

Этот код будет запускаться только один раз при загрузке страницы, вы также должны выполнить его при изменении ввода. Также getElementByName должно быть getElementsByName, и удалите return внутри цикла.

Anurag Srivastava 28.05.2019 19:39

сейчас тестирую...

Ron 28.05.2019 19:44

Обратите внимание, что ваше оповещение сработает дважды, если оба элемента не отмечены флажками. Вместо этого установите флаг вне цикла for и обновите его внутри.

Heretic Monkey 28.05.2019 19:51

Возможный дубликат проверка, выбран ли хотя бы один переключатель - JavaScript

Heretic Monkey 28.05.2019 19:52

@HereticMonke, я пробовал решение там, но у меня та же проблема, всегда возвращает false

Ron 28.05.2019 20:02

@HereticMonkey нужен был флаг снаружи. Спасибо за совет

Ron 28.05.2019 20:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы можете прикрепить изменить прослушиватель событий к каждой из ваших радиостанций...

var myRadios = document.querySelectorAll('[name=radioGrp]');
var selectedValue;

myRadios.forEach(radio => {
  radio.addEventListener('change', changeHandler);
})

function changeHandler(evt) {
  // do some check in here
  console.info(evt.target.value)
}
<input type = "radio" id = "rd1" name = "radioGrp" value='opt1'>opt1
<br>
<input type = "radio" id = "rd2" name = "radioGrp" value='opt2'>opt2

... или вы можете прикрепить отправить обработчик события к своей форме и затем проверить свои данные.

const myForm = document.querySelector('form');
myForm.addEventListener('submit', submitHandler);

function submitHandler(evt) {
  evt.preventDefault();
  const data = new FormData(evt.target);
  const optionVal = data.get('radioGrp');
  // do some check in here
  if (!optionVal) {
    console.info(`Please select a value`)
  } else {
    console.info(`Thanks for selecting ${optionVal}`)
  }
}
<form>
  <input type = "radio" id = "rd1" name = "radioGrp" value='opt1'>opt1
  <br>
  <input type = "radio" id = "rd2" name = "radioGrp" value='opt2'>opt2
  <input type = "submit">
</form>

Не знаю, есть ли у моей формы проблемы, но это не работает. я влезу в события, не очень в курсе. Спасибо :)

Ron 28.05.2019 20:05

Какая часть не работает? Вы получаете какие-либо ошибки в консоли?

ksav 28.05.2019 20:06

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

Ron 28.05.2019 20:18
Ответ принят как подходящий

Вы можете попробовать это:

function validateForm() {
  var radios = document.getElementsByName("radioGrp");
  var formValid = false;

  for (var i = 0, length = radios.length; i < length; i++) {
    if (radios[i].checked) {
      formValid = true;
      break;
    }
  }

  if (!formValid) {
    alert("Select one option");
  }

  return formValid;
}
<form name = "form1" action = "#" onsubmit = "return validateForm();" method = "post">
    
    <input type = "radio" id = "rd1" name = "radioGrp">opt1
    <br>
    <input type = "radio" id = "rd2" name = "radioGrp">opt2
    <br>
    <input type = "submit" value = "Submit">

</form>

Это именно то, что мне нужно. Большое спасибо!! :D

Ron 28.05.2019 20:11

Пожалуйста :)

timos222 28.05.2019 20:17

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