1. 程式人生 > >【JavaScript】在前臺驗證表單,必須使用onsubmit="return xx()"的形式

【JavaScript】在前臺驗證表單,必須使用onsubmit="return xx()"的形式

如下的兩個不同的表單form1與form2,一個通過button按鈕的Onclick事件去驗證表單是否符合要求後才能提交,另一個通過form表單的onsubmit="return xx()"的形式去驗證。

這裡先順帶插一句,沒有onsubmit="xx()"的形式,其中xx()是JavaScript中的驗證函式,不加onsubmit="xx()"打死都驗證不了。

如下的程式碼:

<!DOCTYPE html>  
<html>  
    <head>  
        <title>form表單的實驗</title>  
    </head>  
    <body>  
        <h1>不使用OnSubmit與type='submit'的表單</h1>
        <form action="2.html" method="post" id="form1">
            <input type="text" id="form1_text" />            
        </form>
        <button onclick="form1_check()">提交</button>
        <h2>使用OnSubmit與type='submit'的表單</h1>
        <form action="2.html" method="post" onsubmit="return form2_check()">
            <input type="text" id="form2_text" />
            <input type="submit" value="提交" />
        </form>
    </body>  
</html>
<script>
    function form1_check(){
        var form1_text=document.getElementById("form1_text").value;
        if(form1_text!="1"){
            alert("請輸入1");
            return false;
        }
        else{
            document.getElementById("form1").submit();
        }
    }
    function form2_check(){
        var form2_text=document.getElementById("form2_text").value;
        if(form2_text!="1"){
            alert("請輸入1");
            return false;
        }
        else{
            return true;
        }            
    }
</script>
執行效果如下圖,上述兩個表單在視覺上沒有任何區別,但是在本質上是不同的。


看似皆能完成對文字框輸入的是否為1的驗證,才跳轉到2.html,然而使用button按鈕的Onclick事件去驗證表單是否符合要求後才能提交,問題就出現了,如上圖,儘管form1中沒有提交按鈕input type="submit",卻可以直接在文字框上任何東西都不輸入,直接按回車進行驗證。此時的回車就是扮演了input type="submit"按鈕的作用,無論html程式碼中是否有這個按鈕。由於form1的表單驗證處於button按鈕的Onclick事件,而直接沒有onsubmit函式,所以,在form1中,按回車,無論輸入的是否為1,皆能夠跳轉到2.html。

反觀下方的form2,無論是按回車好、滑鼠按回車按鈕好,都要經過驗證的onsubmit="return xx()"函式,產生前臺驗證表單的效果。