表单仍然返回false,即使其中一个无线电正在被检查

form still returns false even when one of radios is being checked

本文关键字:一个 无线电 检查 返回 false 表单      更新时间:2023-09-26

为什么当一个性别无线电被检查时,表单仍然返回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;
    }
}

如果您想要检查其中任何一个选项是否被选中,请执行以下操作,

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

您可能想要自己大声读出代码。你在问if male isn't checked OR female isn't checked

由于单选按钮只允许选择一个选项,因此此条件将始终运行。

你最简单的解决方案是将OR改为AND

if(!$('.radio_male').checked && !$('.radio_female').checked)

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

使用jQuery检查是否选中了单选框或复选框,它是:

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

你可以把你的代码反过来如果其中一个被检查了就返回真,否则返回假或者你可以尝试使用&&如果单选按钮被选中,