javascript - 如何在提交时验证多个复选框?

标签 javascript html forms validation checkbox

我有两组复选框,名为 pizzaBase 和 pizzaTopping。我想验证我的表格,以便在提交时必须至少选择 1 个基础和顶部。

function main() {
    var form = document.getElementById('formname');
    form.addEventListener('submit', validate);
}

function validate(event) {
    var form = document.getElementById('formname');
    if(!form.pizzaBase.checked) {
        alert("select a base");
        event.preventDefault();
    }
    else if(!form.pizzaTopping.checked) {
        alert("select topping");
        event.preventDefault();
    }
    else {
        return true;
    }
}

问题

  1. 只有第一个 if 语句有效。
  2. 如果复选框被选中然后取消选中,则表单提交为真 提交。
  3. 不验证,不工作。

我哪里错了?

谢谢 GG 指出 JS 可以正常工作,如果有人不介意纠正我的话,我在下面有 HTML。我基本上有以下代码的两个相同版本,一个用于基础,另一个用于浇头。

**

HTML

**

 <section>
        <h2> Bases </h2>
                <p><input type="checkbox" name="pizzaBase" data-price="1.00" data-human-desc = "Small" value="Small"> Small   (£1.00) </p>
                <p><input type="checkbox" name="pizzaBase"data-price="1.50" data-human-desc = "Medium" value="Medium">  Medium   (£1.50) </p>
                <p><input type="checkbox" name="pizzaBase" data-price="2.50" data-human-desc = "Large"value="Large">  Large   (£2.50) </p>
                <p><input type="checkbox" name="pizzaBase" data-price="3.50" data-human-desc = "XLarge"value="XLarge">  XLarge   (£3.50) </p>
                </section>

不确定我是否应该在这里问一个单独的问题,但这是我困惑的 HTML。是分区吗?我试图将每组复选框(底料、浇头)分成两个单独的部分,因此使用了这个标签。

有什么想法吗?

最佳答案

当您有多个同名输入时,form.elementName 将是一个类似数组的元素列表。

该列表将没有 checked 属性。其中的每个项目都会。

您需要遍历列表并检查是否检查了任何元素。

function areAnyChecked(list) {
    for (var i = 0; i < list.length; i++) {
        if (list[i].checked) { 
            return true;
        }
    }
    return false;
}

if(! areAnyChecked(form.pizzaBase)) {
...

关于javascript - 如何在提交时验证多个复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36669997/

相关文章:

javascript - 经过一些计算后对输入字段求和

javascript - 在页面加载时调整 Canvas 大小

c# - 如何将字体添加到具有多个属性的标签?

php - MySQL/SQL/PHP 语法错误

javascript - HTML 输入标签,无法输入

javascript:将函数存储为数组

javascript - 道场和 Firebug

javascript - Chrome 扩展程序无法加载 .json 文件

javascript - onClick图片,显示div内容

javascript - 访问 Polymer 中的原生 HTML 元素