大家好我正在创建一个验证,检查用户是否通过检查选择了至少一个支架,如果没有选择支架,则应显示警告框,告诉用户至少选择一个支架。我的javascript函数是在提交时触发的。
我的代码是
function checkstanddocument(){
ab = document.getElementById("repo_document_form").elements[['stands[]']];
for (var i = 0; i <= ab.length; i++){
if (ab[i].checked == true){
return true
}
}
alert("Please select at least one stand");
return false
}
我认为如果没有选中复选框,系统将只进入警告框,但即使您选中或未检查它,它甚至都没有到达警告框,我希望它显示错误,如果有没有选中复选框..任何人都可以告诉我,我做错了什么。请为我看起来110%正确。
答案 0 :(得分:3)
for循环中的条件错误,请使用:
for(var i = 0; i < ab.length; i++) {
<
而非<=
编辑:
这是什么:document.getElementById("repo_document_form").elements[['stands[]']];
?
对我来说根本没有意义......
我怀疑错误是在那条线附近。 (elements[[
看起来很奇怪 - 你的循环输入了吗?)
答案 1 :(得分:1)
其他答案很棒,但他们遗漏了一件事。你必须检查以确保ab实际上是一个数组。如果只有一个复选框,它将作为单个HTML元素返回。
function checkstanddocument(){
var hasOne = false;
ab = document.getElementById("repo_document_form").elements[['stands[]']];
if (ab.length != null){
for (var i = 0; i < ab.length; i++){
if (ab[i].checked == true){
hasOne = true;
}
}
}
else hasOne = ab.checked;
if (hasOne == false) {
alert("Please select at least one stand");
return false
} else {
return true;
}
}
答案 2 :(得分:0)
function checkstanddocument(){
var hasOne = false;
ab = document.getElementById("repo_document_form").elements[['stands[]']];
for (var i = 0; i < ab.length; i++){
if (ab[i].checked == true){
hasOne = true;
}
}
if (hasOne == false) {
alert("Please select at least one stand");
return false
} else {
return true;
}
}
答案 3 :(得分:0)
我发现PrototypeJS使用带有CSS选择器的$$()
函数可以非常轻松地获取所需的控件。
这样做的好处是只能实现循环,实际找到的复选框很多,所以你不必担心所有的循环边缘条件。
如果未选中任何复选框(或未找到复选框),此函数将显示警告,并且还会根据找到的内容返回true或false。
function checkstanddocument() {
var ret = false;
$$('#repo_document_form input[type="checkbox"][name="stands[]"]').each( function(checkbox) {
if(checkbox.checked) {
ret = true;
throw $break;
}
});
if(!ret) {
alert('Please select at least one stand.');
}
return ret;
}