JavaScriptフロントエンドform検証(正規表現なし)


  • 注:セットするjsとhtmlファイル
  • が必要です
  • 困難なところはどのように維持して、classの累積!invalidというclassは固有classに加算され、真ん中はスペースで区切られています!  
  • 本文は『JavaScript&Ajax』文の中でこれに対する検証関数を参考にする前にネストが多すぎて、頭が大きいのを見た.だから私はそれを独立した関数
  • に分割しました
  • case条件では最適化が必要で、他にも修正が必要です!  
  • 記念の下でこれは私が初めて本当の意味の開発に関する文章を出したのです!

  •  
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<title>Car Picker</title>
    	<script language="Javascript" type="text/javascript" src="validate.js">
    	</script>	
    	<link rel="stylesheet" href="validate.css" />
    </head>
    <body>
    <h2 align="center">Car Picker</h2>
    <form action="#">
    	<p><label for="emailAddr">Email Address:
    		<input id="emailAddr" type="text" size="30" class="reqd email" />
    	</label></p>
    	<p><label for="color">Colors:
    		<select id="color" class="reqd">
    			<option value="" selected="selected">Choose a color</option>
    			<option value="Red">Red</option>
    			<option value="Green">Green</option>
    			<option value="Blue">Blue</option>
    		</select>
    	</label></p>
    	<p>Options:
    		<label for="sunroof"><input type="checkbox" name="checkes" id="sunroof" value="checkCar" class="checkes" />Sunroof (Two door only)</label>
    		<label for="pWindows"><input type="checkbox" name="checkes" id="pWindows" value="checkCar" class="checkes" />Power Windows</label>
    	</p>
    	<p><label for="radios">Doors:&nbsp;&nbsp;
                <input type="radio" id="twoDoor" name="radios" value="twoDoor" class="radios" />Two
                <input type="radio" id="fourDoor" name="radios" value="fourDoor" class="radios" />Four
    	    </label></p>
        <!--
        <p><label for="zip">Enter your Zip code or pick the dealer nearest you:<br />
    		Zip: <input id="zip" type="text" size="5" maxlength="5" class="isZip dealerList reqd " />
    		<select id="dealerList" size="4" class="zip">
    			<option value="California--Lemon Grove">California--Lemon Grove</option>
    			<option value="California--Lomita">California--Lomita</option>
    			<option value="California--Long Beach">California--Long Beach</option>
    			<option value="California--Los Alamitos">California--Los Alamitos</option>
    			<option value="California--Los Angeles">California--Los Angeles</option>
    		</select>
    	</label></p>
    	-->
    	<p><input type="submit" value="Submit" />&nbsp;<input type="reset" /></p>
    </form>
    </body>
    </html>

     
    body {
    		color:#000;
    		background-color:#fff;
    }
    input.invalid{
    		background-color:#ff9;
    		border:2px red inset;
    }
    
    span.innerHtml{
       border:1px blue inset; 
    }
    
    label.invalid{
    		color:#f00;
    }
     
    window.onload = initForm;
    
    String.prototype.trim = function(){
        return this.replace(/(^\s*)|(\s*$)/g, "");
    }
    
    function initForm(){
        var formsArr = document.forms;
        for(var i=0;i<formsArr.length;i++){
            var formF = formsArr[i];
            formF.onsubmit = function(){preSubmitForm(formF)};
        }
        document.getElementById("sunroof").onclick = doorSet;
    }
    
    function preSubmitForm(formF){
        var formAllTag = formF.getElementsByTagName("*");
        for(var i=0;i<formAllTag.length;i++){
            var formTag = formAllTag[i];
            if(!validate(formTag)){
                formTag.focus();
                if(formTag.nodeName=="INPUT"){
                    formTag.select();
                }
                return false;
            }
        }
        return true;
    }
    
    function validate(formTag){
        var tagClassPrim = formTag.className;
        var classPrim = tagClassPrim.split(" ");
        var classOut = "";
        if(null!=classPrim && classPrim.length>0){
            for(var i=0;i<classPrim.length;i++){
                classOut += convertClass(formTag,classPrim[i]);
            }
            formTag.className = classOut;
        }
    
        if(classOut.indexOf("invalid")>-1){
            strongLabel(formTag.parentNode);
            return false;
        }
        return true;
    }
    
    function convertClass(formTag,classSingle){
        var newClass = "";
        switch(classSingle){
            case "":
            case "invalid":
                 break;
            case "reqd":
                 if(formTag.value.trim()==""){
                     newClass = " invalid "+classSingle;
                 }else{
                     newClass = " "+classSingle;
                 }
                 break;
            case "passwd1":
                 if(!checkPasswd(formTag,classSingle)){
                    newClass = " invalid "+classSingle;
                 }else{
                     newClass = " "+classSingle;
                 }
                 break;
            case "checkes":     
            case "radios":
                 if(!checkCar(classSingle)){
                    newClass = " invalid "+classSingle;
                 }else{
                    newClass = " "+classSingle;
                 }
                 break;
            case "zip":
                 if(!checkZip(formTag,classSingle)){
                    newClass = " invalid "+classSingle;
                 }else{
                    newClass = " "+classSingle;  
                 }
            default:
                 newClass = " "+classSingle;
        }
        return newClass;
    }
    
    function checkPasswd(forTag,classSingle){
        var passwd1 = document.getElementById(classSingle);
    
        var passErrObj = document.getElementById("passErrorHint");
        if(passwd1.value!=forTag.value){
    
            passErrObj.className = "innerHtml";
            passErrObj.innerHTML = "       ";
            return false;
        }
        passErrObj.className="";
        passErrObj.innerHTML="";
        return true;
    }
    
    function strongLabel(labelTag){
        if(labelTag.nodeName=="LABEL"){
            labelTag.className += " invalid "; 
        }
    }
    
    function checkCar(classSingle){
            var checkes = document.getElementsByName(classSingle);
    		if(null==checkes || null==checkes.length){
    			return false;
    		}else{
    			for(var i=0;i<checkes.length;i++){
    				if(checkes[i].checked){
    					return true;
    				}
    			}
    			return false;
    		}
    }
    
    function checkZip(formTag){
        var zipStr = formTag.value;
        for(var i=0;i<zipStr.length;i++){
            var intCode = parseInt(zipStr.charAt(i));
            if(intCode==NaN){
                return false;
            }
            if(intCode<0||intCode>9){
                return false;
            }
        }
        return true;
    }
    
    function  doorSet(){
        if(this.checked){
           document.getElementById("twoDoor").checked = true;
        }else{
           document.getElementById("twoDoor").checked = false; 
        }
    }