[原创]表单验证之return与return false

  PS:最近渣渣在学JS 想找个实习来着 太渣没人要= = 马上大四了 吃枣药丸[原创]表单验证之return与return false

 

   

    在学习JS基础教程上的表单验证的例子时,发现了这个问题。

  众所周知,使用return可以中止当前函数的运行,return其后的语句不再运行。但是对于表单提交,单单一个return却不够,下面我们来看一下,return和return false在表单提交的时候有什么区别。

 

 

下面的JS代码对原代码进行了修改,个人认为利于理解

//此例用于验证表单是否为空、密码是否一致

window.onload = initForm;
function initForm(){
  for(var i = 0; i < document.forms.length; i++)    //遍历每一个表单
  document.forms[i].onsubmit = validForm;
}
function validForm(){
  var allTags = this.elements;
  //var tmp = "";          //用于记录密码(用于对密码的再输入校验)
  for(var i = 0; i < allTags.length; i++){
    if(!validTag(allTags[i]))
      return false;
    /*if(allTags[i].type == "password"){ //输入为密码
      if(tmp == "")
        tmp = allTags[i].value;
      else if(tmp != allTags[i].value){
        addStyle(allTags[i]);
        return false;
      }
      else delStyle(allTags[i]);
    }*/
  }
  return true;
}

//这里仅考虑了文本框、下拉菜单的情况

function validTag(thisTag){

  //非sumbit或者reset选项
  if(thisTag.nodeName != "SUBMIT" && thisTag.nodeName != "RESET"){  
    if(thisTag.className.indexOf("reqd") > -1){      //必填字段

      if(thisTag.value == "" || thisTag.value == " "){ //值为空或者空白

        return addStyle(thisTag);       //增加样式        
      }
      delStyle(thisTag);    //删除样式
    }
  }
  return true;
}
function addStyle(thisTag){
  if(thisTag.parentNode.nodeName == "LABEL")
    thisTag.parentNode.className += " invalid"
  thisTag.className += " invalid";
  thisTag.focus();
  if(thisTag.nodeName == "INPUT")
    thisTag.select();
  return false;
}
function delStyle(thisTag){
  if(thisTag.className.indexOf("invalid") > -1)
    thisTag.className = thisTag.className.replace(" invalid", "");
  if(thisTag.parentNode.className.indexOf("invalid") > -1)
    thisTag.parentNode.className = thisTag.className.replace(" invalid", "");
}

 

 

 

  代码不用多说,都能看懂,问题在于红色标注的return false。

 

  那么首先把return false改为return吧,这里函数也没要求返回参数不是?那就用return就够了,我刚开始就是这么想的。

这是需要验证的页面,很简单的一个用户名、密码还有个确认密码(无视即可)

[原创]表单验证之return与return false

 

赶紧就这么空白提交试试

[原创]表单验证之return与return false

 

[原创]表单验证之return与return false阿里?哪里不对啊,注意地址栏显示?#(如下图),我的表单的默认提交地址就是#,因此可以得出此时表单已经提交,而且对于未通过验证的单元,我加了样式,背景色红色

 [原创]表单验证之return与return false

 

 

细心的人可能发现:上图的GIF动画中,表单的用户名(Your Name)确实被标记成红色,但是一闪就没了,成为了提交表单。

 

经过一番研究(百度啊,坐椅子上转圈啊等),才得知return虽然中止了对表单元素的验证,但是并未阻止表单的提交,相当于前功尽弃。

 

在表单提交之中,return和return false的区别就在于此(转了一下午椅子总算学点东西ORZ)

那么还不快改为return false试试

[原创]表单验证之return与return false

这下点击submit之后,正常了吧~