浅谈 form 表单提交

  原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7675230.html

  若有错误,请评论指出,谢谢!

  Form 对象代表一个 HTML 表单。在 HTML 文档中 <form> 每出现一次,就会有一个Form 对象被创建。

  首先,看Form自身的事件句柄属性。Form对象本身提供两个JavaScript事件句柄属性:onreset() 和 onsubmit(),前者可用于重置form表单中的数据,后者在试图提交表单时调用。可以给onsubmit属性指定JavaScript语句或函数用于在提交时执行。比如,一个简单的测试,使用input标签在提交表单时弹出提示“表单提交...”,则为:

<form action="/" onsubmit="alert('表单提交...')">
    <input type="submit" value="提交">
</form>

这条语句除了让浏览器弹出一个提示框外没有其他作用,但它验证了Form对象的onsubmit 句柄属性。可以给onsubmit属性指定提交事件触发时需要执行的函数,比如,登录时指定一个名为login的函数:

<form action="/" onsubmit="login();">
    <input type="submit" value="提交">
</form>

这样,在点击“提交”按钮时会触发“表单提交”事件,并执行login函数。一种通常的做法是给onsubmit句柄属性中添加带有return语句的JavaScript函数来判断“表单提交”事件是否被执行,这是句柄属性的特性,如果句柄的值为false,则该句柄事件不会被执行,对onsubmit句柄来说,“如果 onsubmit 句柄返回 fasle,表单的元素就不会提交”。这样,就可以在login函数中指定在什么情况下函数返回true,即什么情况下才能提交表单:

<form action="/" onsubmit="return login();">
    <input type="submit" value="提交">
</form>

login函数的逻辑直接决定该表单是否会被提交。如果再扩充表单内容,在其中添加文本框和密码框:

<form action="/" onsubmit="return login();">
    用户名:<input type="text" id="uname">
    密码:<input type="password" id="upass">
    <input type="submit" value="submit">
</form>

逻辑为指定当用户名或密码有一个为空的时候不能提交表单,则在login函数中可以这样写:

<script>
    function login(){
        var uname = document.getElementById("uname").value;
        var upass = document.getElementById("upass").value;
        
        if(uname == "" || upass == ""){
            return false;
        } else {
            return true;
        }
    }
</script>

  onsubmit句柄一个很大的作用就是可以在初始刷新页面或按下回车键的时候“阻止表单自动提交”,因为每次提交前都会去调用句柄去判断,如果逻辑判断返回false,则不会提交。

  此外,Form对象还提供有submit()方法用于提交数据,但是,当submit()方法被执行时,Form的onsubmit事件句柄不会被调用。如何来验证该方法呢?可以通过其另一个onclick句柄添加函数间接实现。比如,form元素的onsubmit句柄函数为login_1(),类型为button的input元素的onclick句柄函数为login_2(),login_1()函数返回false,login_2函数中获取form元素DOM,并调用其submit()方法。代码如下,查看表单是否会被提交:


<form action="/" onsubmit="return login_1();" id="login">
    <input type="button" value="submit" onclick="return login_2()">
</form>

<script>
    function login_1(){
        return true;
    }
    function login_2(){
        var frm = document.getElementById("login");
        frm.submit();
    }
</script>

结果显示,form表单仍然会被提交,这说明form的onsubmit句柄没有起作用,即login_1()函数没有被调用。

原文地址:https://www.cnblogs.com/weix-l/p/7675230.html