使用jQuery拦截表单提交

Pog*_*ips 33 javascript jquery

我想通过jQuery拦截提交,并首先检查服务器上是否存在文件.如果它存在继续请求,如果不显示消息并且不发送请求.这就是我所拥有的:

$("#methodForm").submit(function(e){

    checkIndex('upload/segments.gen').done(function() {
        return true;
    }).fail(function () {
        e.preventDefault();
        alert("No index present!");
        return false;
    });
});
Run Code Online (Sandbox Code Playgroud)

这是checkIndex():

function checkIndex(file){
    return $.ajax({
        url : file,
        type:'HEAD'
    });
}
Run Code Online (Sandbox Code Playgroud)

会发生什么:文件存在于服务器上,但checkIndex返回失败.首先,我看到警报弹出,然后继续并将发布请求发送到服务器.

我也将其checkIndex()用于其他目的,它的工作方式与预期相同,所以我很确定错误是在提交例程中的某个地方.但我不知道它有什么问题.

use*_*654 60

您不能退回到异步方法(例如ajax)的回调.相反,阻止一起提交,然后在准备好时提交.

$("#methodForm").submit(function(e){
    e.preventDefault();
    var form = this;
    checkIndex('upload/segments.gen').done(function() {
        form.submit(); // submit bypassing the jQuery bound event
    }).fail(function () {
        alert("No index present!");
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 这不适合我.我得到"TypeError:form.submit不是一个函数",如果我使用$(form).submit(),它会一遍又一遍地调用提交处理程序. (3认同)
  • 您有一个带有 `id="submit"` 的元素,请将其更改为其他内容。 (2认同)