我有一个小的javascript函数,可以检查复选框的验证:
function check_this() {
var arrCheckboxes = document.create_schedule.elements["username"];
var checkCount = 0;
for (var i = 0; i < arrCheckboxes.length; i++) {
if(arrCheckboxes[i].checked)
{ checkCount += 1;
}
}
if (checkCount > 0){
return true;
} else {
alert("You do not have any users.");
return false;
}
}
这是相关的Perl代码
print "<form action=\"create-plan.cgi\" method=\"GET\" name=\"create_schedule\" onsubmit=\"return check_this()\">";
foreach(@these_account_users)
{ my $test = $_;
my $choice =1;
foreach(@all_conf_users)
{ if ($test =~ $_)
{ #print "Duplicate";
$choice = 0;
last;
}
}
if ($choice == 1)
{ print "<input name=\"username\" value=\"$_\" type=\"checkbox\"><b>$_</b><br />";
}
else
{ print "<input name=\"username\" value=\"$_\" type=\"checkbox\" disabled=\"disabled\">$_<br />";
}
}
print '<br /><input name="backup_type" type="submit" value="Select Type">';
print "</form><br /><br />";
运行此选项时,如果未选中任何复选框,则会起作用(即显示警报)。如果存在2个或更多复选框,并且选择了至少一个复选框,则它接受它并移动到下一个屏幕。但是,如果只有一个复选框,如果选中该复选框,则会抛出警报并拒绝继续前进。
我做错了什么?
修改
在进一步测试中,我发现如果只有一个复选框,则arrCheckboxes.length
的值为undefined
,但如果有2个或更多帐户,arrCheckboxes.length
的值等于复选框的确切数量。现在我真的很难过.......
答案 0 :(得分:0)
从您的示例来看,似乎当没有选择任何内容并且只有一个复选框时,它不会返回数组实例。更改javascript函数的第一部分如下:
var arrCheckboxes;
if(!document.create_schedule.username.length) {
arrCheckboxes = [document.create_schedule.username];
}
else {
arrCheckboxes = document.create_schedule.elements["username"];
}
这应该可以解决您的错误。