如何在不从 DOM 中删除元素的情况下取消 Promise?
fiddle http://jsfiddle.net/ripper234/LG9eZ/4/
我运行了这段代码:
$("#box")
.delay(2000)
.show("slow")
.delay(2000)
.promise()
.then(function(){log("Done");});
在此之后,有没有办法取消承诺呢?两个都clearQueue()
and stop(true)
不起作用,因为这不是我要取消的动画。我看到了remove()
应该这样做......但我只想停止承诺,而不是删除整个元素。
好消息。从昨天开始你可以取消你的承诺。
我发布了我的小插件的新版本jquery 计时 http://creativecouple.github.com/jquery-timing/它提供了两种方法,其中包括 .wait() 和 .unwait()。
var deferred = $("#box").delay(2000).show("slow").delay(2000).promise();
$.wait(deferred, function(){ log("Done"); });
如果您想取消注册回调:
$.unwait();
这些静态版本的 wait 和 unwait 还支持可选的组名称,以便不取消任何处理程序,而仅取消特定的集合。
除此之外,你还可以做很多更聪明的事情,例如:
$('#box').wait(deferred).addClass('ready');
或一条链中的整个代码,没有 unwait 选项:
$("#box").delay(2000).show("slow")
.delay(2000).join(function(){log("Done");})).addClass('ready');
或者相同甚至更短,可以选择取消两次暂停:
$("#box").wait(2000).show("slow",$)
.wait(2000, function(){log("Done");})).addClass('ready');
只需查看最适合您的文档、示例和 API。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)