jQuery取消绑定回调内部

时间:2017-10-19 11:21:07

标签: javascript jquery forms

我有一些JavaScript需要在提交表单之前运行。运行的部分JavaScript是一个以异步方式运行的分块文件上传器:(resumable.js)。

该库提供了一个在上传完成时进行监听的功能。当我取消绑定此函数内部的提交事件时,表单不会提交,页面只会重新加载。但是,当unbind不在函数内部时(尽管在文件上传器完成其工作之前),表单将提交。

此代码不提交表单(r是分块文件上传器的对象实例):

$('#Form1').submit(function (e) {
    var form = $(this);

    e.preventDefault();

    r.upload(); //async

    r.on('complete', function () {
        form.unbind('submit').submit();
    });
});

此代码将提交表单(但显然过早,在上传者可以完成其工作之前):

$('#Form1').submit(function (e) {
    var form = $(this);

    e.preventDefault();

    r.upload(); //async

    form.unbind('submit').submit();
});

为了澄清,我想要发生的事件链是:

  1. 用户点击提交。
  2. JavaScript上传器将文件上传到网络服务。
  3. 上传完成后,会发布网络表单。
  4. 编辑:问题的症结在于:

    r.on('complete', function () {
        form.unbind('submit').submit();
    });
    

    以上代码段的行为方式与此不同:

    form.unbind('submit').submit();

    我无法弄清楚原因。

1 个答案:

答案 0 :(得分:-1)

我不明白为什么你需要取消绑定事件,但是如果你只需要触发一次就可以使用.one来附加事件。它会在触发后自动解除绑定。

我想我误解了你的问题。下面的代码适合我。我认为很清楚:定义函数来终止提交并开始上传;关于可恢复的完全解除绑定功能然后触发表单提交。

function pseudoSubmit(e) {
    e.preventDefault();
    return r.upload();
};
r.on('complete', function () {
   $('#Form1').off('submit', pseudoSubmit ).submit();
});

$('#Form1').on('submit', pseudoSubmit );