我似乎在观察至少一种情况,如果在执行时出现错误,传递给jQuery效果函数的回调函数将重复执行。
例如,请参阅this JS Fiddle,其中包含以下代码:
$('#awesome').fadeOut(400,function () {
log('fading out...');
dieInAFire();
});
log
将传递给它的任何内容附加到div ...但dieInAFire
不存在。然而,相反只是简单地停止执行,匿名函数似乎被反复调用,正如日志div中“淡出...”的出现数量越来越多所证明的那样。
这是预期的行为吗?如果是这样,为什么?
答案 0 :(得分:4)
这是一个已知的错误。 See the report here.
答案 1 :(得分:1)
我刚刚提交了一篇关于patrick dw发布的错误的评论。
更改行:
options.complete.call(elem);
要:
setTimeout(function(){
options.complete.call(elem);
}, 0);
使回调以异步方式执行,如果它抛出任何错误,它将不再停止执行。 IMO它比使用try catch
更好,因为它不会抑制异常。
如果您要编辑缩小版本,并使用最新的jQuery,则可以搜索e.complete.call(d)
并将其替换为setTimeout(function(){e.complete.call(d)},0)