1

我有一个表单,当用户单击提交按钮时,我想在执行表单操作(转到下一页)之前运行一个单独的 PHP 脚本。

当然,我可以停止表单操作,evt.preventDefault();然后我可以触发我的 jquery$.post调用,但据我所知,我不能“恢复”或撤消这个 preventDefault 调用。

那么,在用户单击提交按钮但在用户被重定向到表单操作标记中定义的下一页之前,执行处理某些信息的脚本的最佳方法是什么?

(当然,我可以只保留数据并在下一页上执行我想要的任何操作——但在这种情况下,我希望将其分开)。

感谢您的任何建议!

4

7 回答 7

2

你可以尝试这样的事情:

var posted = false;
$('form').on('submit', function(ev) {
    if ( ! posted ) {
        ev.preventDefault();
        $.post(url).done(function() {
            posted = true;
            $('form').trigger('submit');
        });
    }
    posted = false;
});

或者更简洁,使用额外的参数

$('form').on('submit', function(ev, posted) {
    if ( ! posted ) {
        ev.preventDefault();
        $.post(url).done(function() {
            $('form').trigger('submit', [true]);
        });
    }
});
于 2013-08-01T16:44:55.397 回答
1
  1. 您的 $.post 调用可以同步运行,因此在您得到服务器的响应之前,表单不会提交。

  2. 您可以通过编程方式提交表单,也许在您的回调函数中。

于 2013-08-01T16:46:00.920 回答
1

阻止默认打开form,然后运行post,成功后post,通过 id 定位表单并使用 .submit();

$('#submit-button').click(function(e) {

   e.preventDefault();

    $.post({
     url:'url',
     success:function() {
        $('#formid').submit()
     }
     });

});
于 2013-08-01T16:46:01.067 回答
0

您可以只使用本机提交函数而不是 jQuery 的 submit() 再次通过事件处理程序

$('form').submit(function(e){ // change form to your form id
    e.preventDefault();
    var el = this; // store this form in variable
    $.post('/echo/html/',data,function(d){ // your post function
       el.submit(); // trigger native submit function in success callback
    });
});

小提琴

于 2013-08-01T17:45:43.520 回答
0

你总是可以挂钩点击事件,然后做你的事情。完成后,您只需执行 $(form).submit();

工作示例

$("#submitbutton").click(function(e) {
    e.preventDefault(); 
    // do your ajax stuff here.. $.post().
    $("#form").submit();
});
于 2013-08-01T16:50:24.853 回答
0
  1. 使用您的 evt.preventDefault()。
  2. 进行 $.ajax() 调用以运行您的 php 脚本。
  3. 在 $.ajax() 成功/失败回调中,检查您要运行的 php 脚本的输出,并相应地进行 $.post 调用(或不调用)。
于 2013-08-01T16:46:09.330 回答
-2

在您的表单标签中,添加onsubmit="myfunction()"

于 2013-08-01T16:45:58.043 回答