在Perl CGI中,单个复选框的javascript验证失败

时间:2013-11-08 08:25:19

标签: javascript perl checkbox cgi

我有一个小的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的值等于复选框的确切数量。现在我真的很难过.......

1 个答案:

答案 0 :(得分:0)

从您的示例来看,似乎当没有选择任何内容并且只有一个复选框时,它不会返回数组实例。更改javascript函数的第一部分如下:

var arrCheckboxes;
if(!document.create_schedule.username.length) {
arrCheckboxes = [document.create_schedule.username];
}
else {
arrCheckboxes = document.create_schedule.elements["username"];
}

这应该可以解决您的错误。