form表单提交问题

1.提交后不能跳转到指定页面

jsp代码

<form class="form-horizontal" role="form">
        <p class="task-title">新增</p>
        <div id="field-list">
      <!--表单项-->
        </div>
        <button type="submit"</span> class="btn btn-primary" value="">保存</button>
</form>

js提交事件处理:

$(".btn-primary").click(function(){
    $.post("url", {
        para
    }, function(data) {
        window.history.back();
    });
})

这种写法在页面点击保存后在当前页面跳转, 而不执行post请求function(data){}中的方法:window.history.back()返回到上一级历史页面,分析原因是button的type是submit, Submit会将表单提交(form.submit())作为其onclick后的默认事件, 执行完onClick, 转到action. 默认在当前页跳转.

这样不行于是试了试去掉type="submit"

<button class="btn btn-primary" value="">保存</button>

依然不行, 查了查发现<button> 这个按钮放在 form 中也会点击自动提交.

解决办法: type改成button

<button type="button" class="btn btn-primary" id="save_or_update_btn">保存</button>

于是可以了.

2.不用button的onclick()方法提交表单,改用form的onsubmit.

jsp代码

<form class="form-horizontal" role="form" method="post" onsubmit="return postData()">
        <p class="task-title">新增</p>
        <div id="field-list">
<!-- 表单项-->
        </div>
        <button type="submit"class="btn btn-primary" value="">保存</button>
</form>

js代码:

$(".btn-primary").click(function() {
 $(".form-horizontal").submit();
});

function postData() {
    $.post("url", $(".form-horizontal").serializeArray(), function(data) {
        if (data) {
            if (data.success){
                location.href="url";
            } else{

            }
        }
    });
    return false;
}

可以跳转到指定url了, 也可以保存数据到数据库, 但是会一次保存两条. 分析原因是因为form表单中的button有着自动提交功能, 点击保存后button提交一次, form表单中的onsubmit又执行postData()方法提交一次, 因此数据库中会存入两条相同的数据.

既然submit容易出错,那就不用submit了,改为如下代码:

jsp

<form class="form-horizontal" role="form" method="post" onsubmit="return postData()">
        <p class="task-title">新增</p>
        <div id="field-list">
      <!-- 表单项-->
        </div>
        <input type="button"</span> class="btn btn-primary" value = "保存">
</form>

js

$(".btn-primary").click(function() {
    $(".form-horizontal").submit();
});

function postData() {
    $.post("url", $(".form-horizontal").serializeArray(), function(data) {
        if (data) {
            if (data.success){
                location.href="url";
            } else{
            }
        }
    });
    return false;
}

这样就没有问题了, 可以成功保存一条数据, 并且保存之后可以跳转到指定url.

时间: 2024-08-20 17:26:14

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

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

form表单提交

1.form表单提交.html页面失败 <%--客户端form--%> <form id="form2" action="LoginOne.html" method="post"> <div> 用户名: <input type="text" name="username" value="admin" /> <input type=&q

jQuery Form 表单提交插件-----formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的 应用

一.jQuery Form的其他api  1.  formSerialize 将表单序列化成查询串.这个方法将返回一个形如: name1=value1&name2=value2的字符串.是否可以连环调用: 否, 这个方法返回的是一个字符串. 例子: var queryString = $('#myFormId').formSerialize(); // the data could now be submitted using $.get, $.post, $.ajax, etc $.post(

form表单提交踩坑记

今天收获了一次集团故障,心塞不已,究其原因,是form表单提交时web服务器对大小做了限制.这个必现的问题在测试阶段也不知为啥没测出来,项目太紧张,赶出来的东西果然质量没有保证. pc端和H5是两套逻辑.pc端直接提交的file,在webx中设置了单个文件不超过2M,总的不超过6M.刚提测不久,就提了bug,传大文件时服务端返回不正确.经过检查,发现在文件超过3M的时候服务端返回403.诡异的是,应用中并没有返回这个错误响应,打断点也总是不中.度娘后才发现,这是nginx报的错,咨询PE,把ng

jqueryEasyUI form表单提交的一个困惑

今天用到了jqueryEasyUI的form表单做一个增加操作的提交,想打开调试(用的是火狐)看看传的参数,但是怎么也看不到form表单提交的http请求?而且还会发送一个另外的请求! 在页面加载时,会首先初始化一个datagrid,然后可以选择是否选择添加操作.另外发送的这个请求,就是这个datagrid想后台请求数据的请求.就相当与重新刷新了datagrid. datagrid请求数据库数据的操作写在$(function(){})里面,后来想想,是不是这个原因,jqueryEasyUI的fo

extjs中form表单提交成功、失败的响应信息

类Ext.form.Action.Submit 处理表单Form数据和返回的response对象的类. 该类的实例仅在表单Form{@link Ext.form.BasicForm#submit 提交}的时候创建. 返回的数据包必须包含一个 boolean 类型的success属性,还有可选地,一个含有无效字段的错误信息的属性 A response packet may contain: ·        success property : Boolean - required. ·