0

我有处理表单提交事件的功能。

我想要在处理程序中做的是推迟默认行为,直到 Ajax 函数完成运行。

示例代码

$("#some_form").on("submit", function(event){
    // Defer default event behavior

    // Do some ajax function with a callback function to run
    // after it is finished as an argument
    ajaxFunction(function(){
        // Do some stuff

        // Let the default event behavior that was deferred to be run
    });
});

有没有办法做到这一点?

编辑:

Ajax 代码只是一个示例。我可以这样做

$("#some_form").on("submit", function(event){
        // Defer default event behavior

        // Do some stuff

        // Let the default event behavior that was deferred to be run
});
4

3 回答 3

1

您可以使用 取消表单提交event.preventDefault()。然后在ajax完成时提交表单,使用一个标志来知道ajax是否完成。

$("#some_form").on("submit", function(event){
    if (!$(this).data('ajax-complete')){
        event.preventDefault();
        // Defer default event behavior        
        // Do some ajax function with a callback function to run
        // after it is finished as an argument
        ajaxFunction(function(){
            // Do some stuff

            // submit the form in the ajax success function
            $("#some_form").data('ajax-complete', true).submit();
        });
    }
});
于 2013-01-04T07:35:37.553 回答
0

对于特定调用,请使用 ajax 对象的成功属性。(http://api.jquery.com/jQuery.ajax/)

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $("#some_form").submit();
  }
});
于 2013-01-04T07:30:00.153 回答
0

在默认行为被阻止(延迟)后,您可能需要使用jQuery.ajax提交表单,例如:

$("#some_form").on("submit", function(event) {
    event.preventDefault();
    // do something
    console.log("do something");
    $.ajax({
        type: "POST",
    //  url : "example.php",
    }).done(function() {
        console.log("success");
    }).fail(function() {
        console.log("error");
    });
});

检查演示

于 2013-01-04T09:02:26.203 回答