阻止form表单提交的问题

  阻止form表单提交这种场景可能在生活中,我们经常碰到,而在我们第一印象里面可能我们用return false 去阻止表单默认行为。

  但是,有中情况我们用return false 不能阻止表单提交

    <div class="warp">
        <h2>登录到pfan空间</h2>
        <p>这里有更多的知识分享,交流。</p>
        <form action="/register" method = "post" >
            <input type="text" name = "username" placeholder = "请输入注册用户名">  <br />
            <input type="password" name = "pwd" placeholder = "请输入初始密码">   <br />
            <input type="password" name = "aginpwd" placeholder = "请再次输入密码">   <br />
            <input type="submit" value ="注册" class="login_btn">
        </form>
    </div>
<script>
    var form = document.forms[0],
        submit = document.querySelector(".login_btn"),
        inputBtn = document.getElementsByTagName("input");
        console.log(form);
    form.addEventListener("submit",function(){
        if(inputBtn[0].value == ""){
            alert("请您认真填写注册用户名!");
                return false;
        }else if(inputBtn[1].value == ""){
            alert("请您认真输入初始密码!");
                return false;
        }else if(inputBtn[2].value == ""){
            alert("请您再次输入密码");
                return false;
        }else if(inputBtn[1].value != inputBtn[2].value){
            alert("两次密码输入不匹配,请更正!");
                return false;
        }
    },false);

</script>

  以上代码我们看着,好像没有错误,但是,表单依然可以提交,测试环境chrome。

  但是我们将return false 改成用 e.preventDefault(),却可以达到阻止表单提交的效果:

    <div class="warp">
        <h2>登录到pfan空间</h2>
        <p>这里有更多的知识分享,交流。</p>
        <form action="/register" method = "post" >
            <input type="text" name = "username" placeholder = "请输入注册用户名">  <br />
            <input type="password" name = "pwd" placeholder = "请输入初始密码">   <br />
            <input type="password" name = "aginpwd" placeholder = "请再次输入密码">   <br />
            <input type="submit" value ="注册" class="login_btn">
        </form>
    </div>
<script>
    var form = document.forms[0],
        submit = document.querySelector(".login_btn"),
        inputBtn = document.getElementsByTagName("input");
        console.log(form);
    form.addEventListener("submit",function(e){
        if(inputBtn[0].value == ""){
            alert("请您认真填写注册用户名!");
            e.preventDefault();
        }else if(inputBtn[1].value == ""){
            alert("请您认真输入初始密码!");
            e.preventDefault();
        }else if(inputBtn[2].value == ""){
            alert("请您再次输入密码");
            e.preventDefault();
        }else if(inputBtn[1].value != inputBtn[2].value){
            alert("两次密码输入不匹配,请更正!");
            e.preventDefault();
        }
    },false);

</script>

  另一种就是将其改成用onsubmit:

    <div class="warp">
        <h2>登录到pfan空间</h2>
        <p>这里有更多的知识分享,交流。</p>
        <form action="/register" method = "post" >
            <input type="text" name = "username" placeholder = "请输入注册用户名">  <br />
            <input type="password" name = "pwd" placeholder = "请输入初始密码">   <br />
            <input type="password" name = "aginpwd" placeholder = "请再次输入密码">   <br />
            <input type="submit" value ="注册" class="login_btn">
        </form>
    </div>
<script>
    var form = document.forms[0],
        submit = document.querySelector(".login_btn"),
        inputBtn = document.getElementsByTagName("input");
        console.log(form);
    form.onsubmit = function(){
        if(inputBtn[0].value == ""){
            alert("请您认真填写注册用户名!");
            return false;
        }else if(inputBtn[1].value == ""){
            alert("请您认真输入初始密码!");
            return false;
        }else if(inputBtn[2].value == ""){
            alert("请您再次输入密码");
            return false;
        }else if(inputBtn[1].value != inputBtn[2].value){
            alert("两次密码输入不匹配,请更正!");
            return false;
        }    

    }
</script>

  参考资料

  http://stackoverflow.com/questions/4924036/return-false-on-addeventlistener-submit-still-submits-the-form

时间: 2024-08-24 01:41:59

阻止form表单提交的问题的相关文章

js阻止form表单重复提交

防止表单重复提交的方法总体来说有两种,一种是在js中阻止重复提交:另一种是在后台利用token令牌实现,大致思路是生成一个随机码放到session和form表单的隐藏输入框中,提交表单时两者对比,表单处理完毕清空或者修改session中的token. 在js中处理简单易懂,同时能解决我现在所做的项目中的问题,目前暂用js处理,后期如有需要再研究token机制.代码如下: 1.表单提交后禁用提交按钮(在本项目中表单提交完成后,如果处理成功都把form表单关掉了) 1 /** 2 * form表单格

js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题

js模拟form表单提交数据源码: /** * js模拟form表单提交 * @param {object} 参数对象 * url 必填 提交地址 * methond 选填 默认post 提交方式 post get * target 选填 默认_self 当前页面还是新页面 _self _blank * 其它参数 */ function jsFormSubmit(params) { var turnForm = document.createElement("form"); //一定要

Form表单提交数据的几种方式

一.submit提交 在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮(<input type='submit'>)就可以进行数据的提交,每一个input标签都需要有一个name属性,才能进行提交. <form action='http://www.123.com/postValue' method='post'> <input type='text' name='username' /> <input type=

关于form表单提交ajaxForm和ajaxSubmit的用法与区别

前几天在学习form表单提交时看到这两种方法,这两种方法都是实现form的ajax提交的方法,看了很多资料还是不太明白其用法和区别,最后直接自己写demo,很快就理解,所以说实操是学习的最快捷直接的途径.好了,下面回到正题: 在使用这两种方法之前,首先需要安装form.js的插件,下载就不放了,网上一搜就有: <script src="/Tool/HtmlPage/S45/js/jquery-form.js"></script> 一.首先说用法,ajaxForm

ajax传递数组、form表单提交对象数组

在JSP页面开发中,我们常常会用到form表单做数据提交,由于以前一直只是使用form表单提交单个对象,只要表单文本域的name值和接收的对象的属性名一致,那么传值就没有什么问题.不过,在前几天的开发任务中,遇到了需要批量传递对象,也就是需要传递对象数组,在此做个总结.今天又遇到需要向后台传递数组,便一并写下来吧. 1.ajax传递普通数组 前台代码 var deleteNum= [];//定义要传递的数组 deleteNum.push("1"); deleteNum.push(&qu

ajax form表单提交 input file中的文件

ajax form表单提交 input file中的文件 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为了解决这个问题我走了不少弯路: 1.用原生的 input file , 不支持ajax上传文件,你肯定会说可以用 ajax form表单上传了呀?不过我后面还要调用上传成功后用js处理一些对话框,所以这种方法排除 2.用了 uploadify 上传插件,弄出来能上传东西,结果不理想:因为不能判断上传的

Jquery form表单提交

起因 由于项目中原先提交from是通过JavaScript指定action,在submit提交的,使用的方式,也不是很标准,造成除了ie之外的浏览器都不能正常的提交数据,做web项目还是要考虑到浏览器的兼容性的. 1.序列化form,通过Ajax提交 $.ajax({ cache: false, type: "POST", url: "readImage.do", data: $('#ff').serialize(), //序列化表单数据 async: true,

form表单提交转为ajax方式提交

在做项目的过程中遇到要将form表单提交转为ajax方式提交,下面是我总结的如何把form表单提交无缝转为ajax方式提交的方法. 原先的form表单长这样: <form action="xxx" method="get"> //action的值是请求的url地址 <div class="form-group"> <label for="name">姓名</label> <

Linux curl 模拟form表单提交信息和文件

curl是一个命令行方式下传输数据的开源传输工具,支持多种协议:FTP.HTTP.HTTPS.IMAP.POP3.TELNET等,功能超级强大. 我今天想说的是程序开发中常用的模拟Form提交 1.GET提交 特别简单直接写url里面 2.POST提交    通过 --data/-d 方式指定使用POST方式传递数据 3.模拟form表单提交文件  --form/-F 模拟form表单提交文件 这个命令超级好用,再也不用为了写上传接口,而被迫写一个Form表单了 "[email protecte