0

因此,我尝试制作一个循环遍历表单元素并检查元素长度的函数,如果是,则更改类,以便它们可以具有不同的样式。我假设的代码可以工作,并且我的控制台中没有任何错误,所以我无法确定到底出了什么问题。如果有人能告诉我为什么这不起作用或如何解决它,那就太棒了!谢谢!

function validate_form(){
 var form = document.forms['form_name']; //store form into a variable
 var validated = true; // store return value for onsubmit attribute
     for(i=0; i<form.elements.length; i++){
      if(form.elements[i].value.length){  // check if form elements are empty
           form.elements[i].className = "validate_failed";  // if elements are empty, add a class that will style them
           validated = false;
           return validated;
    } else{
        validated = true;
        return validated;
    }
    return validated;
}
return validated;
}
4

3 回答 3

2

尝试

function validate_form(){
  var form = document.forms['form_name']; //store form into a variable
  for(var i=0; i<form.elements.length; i++){
    if(form.elements[i].value.length===0){  // check if form elements are empty
      form.elements[i].className = "validate_failed";  // if elements are empty, add a class that will style them
      return false;
  }
  return true;
}

假设

<form onsubmit="return validate_form()" ...

或者让它不显眼

window.onload=function() {
  document.forms['form_name'].onsubmit=function() {
    for(var i=0; i<this.elements.length; i++){
      this.elements[i].className = "";
      if(this.elements[i].value.length===0){  // check if form elements are empty
        this.elements[i].className = "validate_failed";  // if elements are empty, add a class that will style them
        return false;
      }
      return true;
    }
  }
}
于 2013-03-24T19:40:46.233 回答
1

因为您validated在循环的第一次运行期间返回,所以您只会检查表单的第一个元素。您只想设置validated,并在循环后返回它(或者在您第一次将其设置为 false 时返回,具体取决于您想要做什么)。

此外,就像乔评论的那样,您应该拥有var i而不是仅仅i这样,这i不是全球性的。

于 2013-03-24T19:26:56.320 回答
0

以下代码适用于空元素

if(!form.elements[i].value.length){ 

或者

if(form.elements[i].value.length === 0){ 
于 2013-03-24T19:42:52.073 回答