• 浅谈 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()函数没有被调用。

  • 相关阅读:
    2019牛客暑期多校训练营(第六场)
    2019牛客暑期多校训练营(第五场)
    2019牛客暑期多校训练营(第四场)
    2019牛客暑期多校训练营(第三场)
    Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))
    Codeforces Round #486 (Div. 3) C "Equal Sums" (map+pair<>)
    Count New String
    【模板】后缀自动机 (SAM)
    Watchcow
    二次剩余
  • 原文地址:https://www.cnblogs.com/weix-l/p/7675230.html
Copyright © 2020-2023  润新知