单击myFunction并等待它完成
On click myFunction and wait until it is finished
我认为这是很容易做到的事情,但我没有找到任何帮助我走出这个
我有一个函数
(function($){
myFunction = function(e){
e.preventDefault();
// do stuff
// load ajax content
// animate and show
}
$('.button').on( 'click', myFunction);
})(jQuery);
现在这个工作,但我需要知道,等到一切都完成了,如果有人按了许多.button
s在短时间内,因为有一些元素与button
类
I've try with promise()
$('.button').on( 'click', function(){
$.when( myFunction() ).done(function() {
alert('finished')
});
});
但是这给了我一个错误e is undefined
和
$('.button').on( 'click', myFunction).promise().done(function() {
alert('finisehd');
});
有人知道我做错了什么,我怎么做才能让它工作吗?
最常见的解决方案是在调用myFunction
时在单击处理程序中设置一个变量,并在每次调用单击处理程序时检查其状态。这可以在下面这样的地方完成:
(function($){
var wait = false;
myFunction = function(e){
e.preventDefault();
if (wait) {
return;
}
wait = true;
// ...
wait = false;
}
$('.button').on( 'click', myFunction);
})(jQuery);
您的函数myFunction
期望一个参数,当您调用myFunction()
时,该参数丢失。
没有测试,但应该可以工作:
$('.button').on( 'click', function(e){
$.when( myFunction(e) ).done(function() {
alert('finished')
});
});
除了不传递e
变量之外。你没有正确使用$.when
。
如果希望在 myFunction
完成ajax调用后调用done
函数。你需要从myFunction
返回一个承诺。
function myFunction(e) {
return $.Deferred(function(deferred) {
doAjax(function(content) { // callback
deferred.resolve(content);
});
});
}
现在当你做
// inside event handler
$.when(myFunction(e)).done(function(content) {
// whoo!
});
相关文章:
- 单击按钮以等待单击按钮
- React组件等待所需道具进行渲染
- 正在等待呈现图表,直到加载数据为止
- 在等待ajax请求时显示微调器并禁用页面
- Javascript在for循环中等待处理请求
- JavaScript循环并等待函数
- 在等待异步任务时永久循环
- 在通过child.print()打印之前,我如何等待图像加载到我的新窗口中
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 等待300毫秒,然后使用jQuery向下滑动菜单
- 等待循环调用的所有承诺完成
- 等待回调函数执行
- RxJS等待承诺解决
- WIll window.addEventListener(“加载”,function(),false);等待浏览器自动填
- Casperjs等待资源
- draggableCursor没有't更改为等待光标
- 如何使请求等待上一个请求完成
- 更改css链接并等待加载新的css
- ondblclick myfunction()不会激发
- 单击myFunction并等待它完成