форма по-прежнему возвращает false, даже когда проверяется один из радиоприемников

#javascript #html #forms #validation #radio-button

#javascript #HTML #формы #проверка #переключатель

Вопрос:

Почему при проверке одного из гендерных радиоприемников форма по-прежнему возвращает false?

HTML

 <form action="">
    <input class="radio_male" type="radio" name="gender" value="Male"> Male
    <br>
    <input class="radio_female" type="radio" name="gender" value="Female"> Female
    <br>
    <input type="submit" value="Submit">
</form>
  

JavaScript

 var $ = document.querySelector.bind(document);

$('form').onsubmit = function() {
    if(!$('.radio_male').checked || !$('.radio_female').checked) {
        return false;
    } else {
        return true;
    }
}
  

Комментарии:

1. Можете ли вы указать, каким будет результат ?.

2. Ссылка на jsFiddle

3. @JTrixx16 Вот образец, который я сделал. Если вы хотите определить, установлен ли флажок true или false

Ответ №1:

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

 var $ = document.querySelector.bind(document);

$('form').onsubmit = function() {
    if($('.radio_male').checked || $('.radio_female').checked) {
        return true;
    } else {
        return false;
    }
}
  

Ссылка на jsFiddle

Объяснение
В соответствии с вашим следующим условием,
if(!$('.radio_male').checked || !$('.radio_female').checked) {
Вы проверяете, что если Female не выбрано или male не выбрано, то false это логически неверно, поскольку всегда будет либо female не выбрано (когда male выбрано), либо male не выбрано (когда female выбрано), либо оба не выбраны (состояние по умолчанию), так что это условие всегда будет давать true результат.
Итак, в моем предложенном ответе мы сначала проверяем, что либо male выбрано, либо female выбрано, а затем true, еще false .

Комментарии:

1. Я об этом не думал. Большое спасибо!

Ответ №2:

Возможно, вы захотите прочитать свой код вслух для себя. Вы спрашиваете if male isn't checked OR female isn't checked

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

Ваше самое простое решение — перейти от ИЛИ к И

if(!$('.radio_male').checked amp;amp; !$('.radio_female').checked)

JSFiddle: https://jsfiddle.net/Lz44tk7d/2 /

Комментарии:

1. Это также полезно. Большое спасибо!

Ответ №3:

Чтобы проверить, установлен ли флажок radio или checkbox с помощью jQuery, это:

 $('.radio_male').is(':checked')
  

Комментарии:

1. Спасибо. Но я предпочитаю ванильный JS

Ответ №4:

Вы могли бы просто поменять местами свои коды, в которых вы проверили, установлен ли флажок на одном из них, затем вернуть true, а else — false, или вы могли бы попытаться использовать amp;amp; вместо or для проверки, установлен ли переключатель.