0

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

出于某种原因,我无法让这段代码在 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>
4

1 回答 1

1

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

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

如果你要问,form1["baz[]"];你应该得到一个名为的所有元素的列表"baz[]"

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

当然,您可以编写一些解析魔法来自动查找名称中带有“[]”的所有元素,并将“baz”附加为表单的数组,其中填充了所有名为“baz[]”的元素。在那一点上,你可以完全按照你之前想做的事情去做。

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

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

于 2013-03-13T20:52:51.390 回答