在检查我的复选框数组是否全部未选中后,如何显示此警告框

时间:2009-09-03 12:04:37

标签: javascript

大家好我正在创建一个验证,检查用户是否通过检查选择了至少一个支架,如果没有选择支架,则应显示警告框,告诉用户至少选择一个支架。我的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%正确。

4 个答案:

答案 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;
}