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

时间:2013-03-13 20:22:28

标签: javascript arrays attributes square-bracket

此功能限制用户选择的复选框的数量,但是当name属性具有方括号(即name=baz[])时,我无法使其工作。

出于某种原因,我无法让这些代码在jsfiddle中运行,但它基于this tutorial,它有一个可用的演示。

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>

1 个答案:

答案 0 :(得分:1)

Chaya,你的问题实际上源于“[]”是这个名字的一部分。

虽然有条款可以自动将表单及其命名元素转换为JS可访问对象,但是没有规定可以理解哪些元素是数组,而不是非数组,因为这是服务器端的区别:{{ 1}}。

如果你要求?baz[]=1&baz[]=2,你应该得到一个名为form1["baz[]"];的所有元素的列表。

从那里开始,如果你要说"baz[]",你应该得到名为“baz []”的第一个元素。

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

这是否过度取决于你正在做什么。

但是简单地在你的循环中编写form1["baz[]"][0];不应该比你现在得到的更耗时。