我有一些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();
});
为了澄清,我想要发生的事件链是:
r.on('complete', function () {
form.unbind('submit').submit();
});
以上代码段的行为方式与此不同:
form.unbind('submit').submit();
我无法弄清楚原因。
答案 0 :(得分:-1)
我不明白为什么你需要取消绑定事件,但是如果你只需要触发一次就可以使用.one来附加事件。它会在触发后自动解除绑定。
我想我误解了你的问题。下面的代码适合我。我认为很清楚:定义函数来终止提交并开始上传;关于可恢复的完全解除绑定功能然后触发表单提交。
function pseudoSubmit(e) {
e.preventDefault();
return r.upload();
};
r.on('complete', function () {
$('#Form1').off('submit', pseudoSubmit ).submit();
});
$('#Form1').on('submit', pseudoSubmit );