0

チェックボックスの検証をチェックする小さな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つ以上存在し、1つでも選択されていれば受け付けて次の画面に移ります。ただし、チェックボックスが 1 つしかなく、それが選択されている場合は、アラートをスローして先に進むことを拒否します。

私は何を間違っていますか?

編集:

さらにテストしたところ、チェック ボックスが 1 つしかない場合、arrCheckboxes.lengthの値は ですがundefined、アカウントが 2 つ以上ある場合、arrCheckboxes.lengthの値はチェックボックスの正確な数に等しいことがわかりました。今、私は本当に困惑しています.......

4

1 に答える 1

0

あなたの例から、何も選択されておらず、チェックボックスが1つしかない場合、配列インスタンスを返していないようです。JavaScript 関数の最初の部分を次のように変更します。

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

これでエラーが修正されます。

于 2013-11-08T11:09:13.290 に答える