[原創]表單驗證之return與return false


  PS:最近渣渣在學JS 想找個實習來着 太渣沒人要= = 馬上大四了 吃棗葯丸

 

   

    在學習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就夠了,我剛開始就是這么想的。

這是需要驗證的頁面,很簡單的一個用戶名、密碼還有個確認密碼(無視即可)

 

趕緊就這么空白提交試試

 

阿里?哪里不對啊,注意地址欄顯示?#(如下圖),我的表單的默認提交地址就是#,因此可以得出此時表單已經提交,而且對於未通過驗證的單元,我加了樣式,背景色紅色

 

 

 

細心的人可能發現:上圖的GIF動畫中,表單的用戶名(Your Name)確實被標記成紅色,但是一閃就沒了,成為了提交表單。

 

經過一番研究(百度啊,坐椅子上轉圈啊等),才得知return雖然中止了對表單元素的驗證,但是並未阻止表單的提交,相當於前功盡棄。

 

在表單提交之中,return和return false的區別就在於此(轉了一下午椅子總算學點東西ORZ)

那么還不快改為return false試試

這下點擊submit之后,正常了吧~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM