【发布时间】:2013-12-06 11:07:26
【问题描述】:
我在 jQuery 1.7 中遇到了 Deferred 对象的以下问题。这是我的问题的简化版本。跟着小提琴 -
http://jsfiddle.net/daljit/3gbrD/1/embedded/result/
下面是代码sn-p。
var resolveDeferred = false;
var objDeferred = $.Deferred();
function changeDeferred() {
objDeferred.done(myDoneMethod);
if (resolveDeferred) {
objDeferred.resolve();
}
resolveDeferred = true;
}
function myDoneMethod() {
console.log("I am called");
}
<input type="button" value="clickMe" onclick ="changeDeferred()" />
我们可以看到在“clickme”按钮上单击两次,显示两个警报。
有什么办法可以解决这个问题,所以当deferred object被解析时,它只调用了一次,因为方法名是一样的。
对不起,我没有正确解释问题,代码只是为了演示问题。因为方法名称相同所以它不应该调用它两次,或者问问题的方式是 - 是否有任何方法可以检查延迟对象的队列,所以我可以看到有多少方法附加到延迟对象以及方法是否已经附加,所以不要再次附加它。 抱歉没有说清楚。
【问题讨论】: