此功能限制用户选择的复选框的数量,但是当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>
答案 0 :(得分:1)
Chaya,你的问题实际上源于“[]”是这个名字的一部分。
虽然有条款可以自动将表单及其命名元素转换为JS可访问对象,但是没有规定可以理解哪些元素是数组,而不是非数组,因为这是服务器端的区别:{{ 1}}。
如果你要求?baz[]=1&baz[]=2
,你应该得到一个名为form1["baz[]"];
的所有元素的列表。
从那里开始,如果你要说"baz[]"
,你应该得到名为“baz []”的第一个元素。
当然,您可以编写一些解析魔法来自动查找名称中带有“[]”的所有元素,并将“baz”作为表单的数组附加,并填充所有名为“baz []”的元素。在那时,你可以完全按照自己的意愿去做。
这是否过度取决于你正在做什么。
但是简单地在你的循环中编写form1["baz[]"][0];
不应该比你现在得到的更耗时。