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

javascript validation for single checkbox fails in Perl CGI

本文关键字:Perl CGI 失败 验证 复选框 JavaScript 单个      更新时间:2023-09-26

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

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

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

这应该可以修复您的错误。