繁体   English   中英

带有方括号的复选框名称属性的JS语法

[英]JS syntax for checkbox name attribute with square brackets

这个函数限制了用户选择的复选框的数量,但是当name属性带有方括号(即name=baz[] )时,我很难使它起作用。

出于某种原因,我无法在jsfiddle中使用此代码,但是它基于本教程该教程具有有效的演示。

function chkcontrol(j) {
    var total = 0;
    for (var i = 0; i < document.form1.baz.length; i++) {
        if (document.form1.baz[i].checked) {
            total = total + 1;
        }
        if (total > 3) {
            alert("Please select up to three choices")
            document.form1.baz[j].checked = false;
            return false;
        }
    }
}

 <form name="form1">
    <input type=checkbox name="baz[]" value="1" onclick="chkcontrol(0);">Item 1
    <input type=checkbox name="baz[]" value="2" onclick="chkcontrol(1);">Item 2
    <input type=checkbox name="baz[]" value="3" onclick="chkcontrol(2);">Item 3
    <input type=checkbox name="baz[]" value="4" onclick="chkcontrol(3);">Item 4
    <input type=checkbox name="baz[]" value="5" onclick="chkcontrol(4);">Item 5

    <input type=submit value="submit">

</form>

Chaya,您的问题实际上源于“ []”是名称一部分的事实。

尽管提供了将表单及其命名元素自动转换为JS可访问对象的条款,但是却没有条款可以理解哪些元素是数组而不是非数组,因为这是服务器端的区别: ?baz[]=1&baz[]=2

如果您要form1["baz[]"]; 您应该获得名为"baz[]"的所有元素的列表。

从那里开始,如果您要说的是form1["baz[]"][0]; 您应该获得第一个名为“ baz []”的元素。

当然,您可以编写一些解析魔术以自动查找名称中带有“ []”的所有元素,并将“ baz”附加为表单数组,并填充名为“ baz []”的所有元素。 到那时,您可以完全按照自己的意愿去做。

是否过度杀伤取决于您在做什么。

但是,只需在循环中编写form1["baz[]"][i]不会比现在多得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM