覆盖event.preventDefault()

时间:2012-11-05 21:53:11

标签: jquery

我有以下jQuery Ajax代码:

    $("#new_form").submit(function (event) {
        event.preventDefault();
        $.post("/home/new_ajax", $(this).serialize(), function (data) {
            if (data.errors == '') {
                $("#new_form").submit();
            } else {
                alert(data.errors);
            }
        }, "json");
    });

然而,由于

event.preventDefault();

此行不起作用:

 $("#new_form").submit();

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:3)

您可以使用.trigger()代替.submit() - 它允许您传入事件处理程序可以使用的额外参数:

$("#new_form").submit(function (event, skipCustomStuff) {
    // If second parameter is truthy, let the submission happen
    if (skipCustomStuff) return;

    event.preventDefault();
    $.post("/home/new_ajax", $(this).serialize(), function (data) {
        if (data.errors == '') {
            // trigger submission passing in true as second parameter
            $("#new_form").trigger('submit', [true]);
        } else {
            alert(data.errors);
        }
    }, "json");
});

答案 1 :(得分:1)

最简单的方法是执行$("#new_form")[0].submit(),它将绕过任何jQuery绑定处理程序并提交表单。

$("#new_form").submit(function (event) {
    event.preventDefault();
    $.post("/home/new_ajax", $(this).serialize(), function (data) {
        if (data.errors == '') {
            $("#new_form")[0].submit();
        } else {
            alert(data.errors);
        }
    }, "json");
});