之前我曾问related question,但我现在需要回答的问题似乎已经过了一些具体的切线,所以我觉得提出一个新问题会更好。
我试图阻止表单提交,直到页面上的所有ajax调用都成功返回。
我有一个简单的测试(在调用开始时向计数器添加1,成功时减1)。
我相信我应该能够做到:
// can we submit yet?
$('#checkoutform').submit(function() {
if (ajaxcallcounter == 0) {
return true;
}
return false;
});
在计数器达到零之前阻止表单提交(所有调用都已完成)但由于某种原因,这似乎不是100%有效。
我不知道这是不是红鲱鱼,但是在通话完成之前设法结账的客户的所有报告都使用了Mac Safari(虽然这可能只是巧合)
您可以看到行动中的代码here - 尝试更改投放国家/地区以启动某些ajax调用。当计数器> 1时,应禁用右下方的提交按钮。 0
答案 0 :(得分:1)
定义var ajaxcallcounter = 0;在你的功能之外。将它放在JavaScript文件的顶部,使其成为global variable。
通常,您可以通过停止传播来确保完全控制事件。每个事件处理程序都有一个隐式参数,通常定义为“e”或“event”,您可以在其上调用preventDefault(),如下所示:
$('#checkoutform').submit(function(e) {
e.preventDefault();
if (ajaxcallcounter == 0) {
return true;
}
return false;
});