简单的JavaScript检查不起作用?

时间:2011-07-23 17:20:35

标签: javascript

我有这个验证表格功能:

function ValidateForm() {
    var chks = document.register.elements['sendto[]'];
    var hasChecked = false;
    for (var i=0;i<chks.length;i++){
        if (chks[i].checked){
            hasChecked = true;
            break;
        }
    }
    if (!hasChecked){
        alert("Please select at least one friend.");
        chks[0].focus();
        return false;
    }
}

html是这样的:

<input type="checkbox" name="sendto[]" value="2" >

我知道这不是完整代码。完整的代码是巨大的。但基本上如果代码中只有一个复选框,上面的代码会在ValidateForm()上给出一个未定义的消息。提交表单时调用哪个,并选中上面的复选框。

但如果我在代码中有两个复选框,如下所示:

<input type="checkbox" name="sendto[]" value="2" >
<input type="checkbox" name="sendto[]" value="4" >

在调用ValidateForm()函数时提交,这可以正常工作。我做错了什么,即使检查了它,它也不适用于1个复选框?

3 个答案:

答案 0 :(得分:3)

声明

var chks = document.register.elements['sendto[]'];

获取名称为sendto[]的元素(元素* s *,如果有多个) 如果只有一个名为sendto[]的元素,那么您可以在chks中引用该元素 如果有多个名称为sendto[]的元素,则chks将保留对这些元素数组的引用。

执行此操作时:

 for (var i=0;i<chks.length;i++){

您尝试根据chks.length进行循环。如果chks是一个数组(参见上文:当名称为sendto[]时有多个元素时),则chks.length将保留数组中的元素数。
如果只有一个sendto[]元素,那么chks将保存该元素,并且因为元素(<input type="checkbox" name="sendto[]" value="2" >)没有名为length的属性,浏览器会说 length is indefined

因此,当只有一个sendto[]复选框和多个情景时,您可以区分两种情况:

var chks = document.register.elements['sendto[]'];
    var hasChecked = false;
//Check whether there is one checkbox or whether there are more    
if(chks.length) 
{
   for (var i=0;i<chks.length;i++)
   {
      if (chks[i].checked)
      {
         hasChecked = true;
         break;
      }
   }
}
else
{
   if(chks.checked)
   {
      haschecked = true;
   }
}

<子> 的 PS:
代码在ValidateForm()上给出了一个未定义的消息。即使对你来说也不清楚这意味着什么(这就是你问这个问题的原因)。尝试提供更多细节。任何现代浏览器都会提供有关未定义的更多详细信息,什么未定义哪条线等。即使是预先历史的浏览器也会告诉您抛出未定义错误的行号。有了这些细节,你可以尝试找到这条线,并试着看看发生了什么。你很可能会发现。如果您不这样做,请将此帖子发布到社区,并提供所有这些详细信息。

答案 1 :(得分:1)

<script language="javascript">
function validate() {
    var chks = document.getElementsByName('sendto[]');
    var hasChecked = false;
    for (var i = 0; i < chks.length; i++) {
        if (chks[i].checked) {
            hasChecked = true;
            break;
        }
    }
    if (hasChecked == false) {
        alert("Please select at least one friend.");
        return false;
    }
    return true;
}
</script>

答案 2 :(得分:0)

我会这样做。

if(!validate()){
  alert("Please select at least one.");
  return false;
}

function validate(){
  var els=document.getElementsByName('sendto[]');
  for(var i=0;i<els.length;i++){
    if(els[i].checked){
      return true;
    }
  }
  return false;
}

您可以将validate用作匿名函数。