チェックボックスの検証をチェックする小さな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
の値はチェックボックスの正確な数に等しいことがわかりました。今、私は本当に困惑しています.......