我有两个函数,我试图运行一个函数,然后另一个函数。我在我的代码中实现了这一行:
function1().done(function2);
在最后的function1中,我已经放置了这段代码:
return $.Deferred().resolve();
此功能适用于Firefox和Chrome,但似乎无法在Internet Explorer 11中运行。我没有错误,但功能并没有像往常一样一个接一个地运行。有谁知道为什么会发生这种情况或知道某种解决方法/其他方法可以在所有浏览器中使用?
我一直在使用Internet Explorer玩这个例子并遇到我上面提到的问题(警告在文本被隐藏之前出现,应该反过来发生):
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
function1 = function() {
$("p").hide("slow");
return $.Deferred().resolve();
}
function2 = function() {
alert("Text hidden now.");
}
$(document).ready(function() {
$("button").click(function() {
function1().done(function2);
});
});
</script>
</head>
<body>
<button>Hide</button>
<p>This is a paragraph with little content.</p>
</body>
</html>
答案 0 :(得分:1)
hide
是许多动画中的一种,它会立即返回但在完成过程之外完成。它有第二个参数,一个回调函数,在动画完成时执行。你应该resolve
来自该回调的延迟:
function1 = function() {
var def = $.Deferred();
$("p").hide("slow",function(){def.resolve(); });
return def.promise();
}
https://jsfiddle.net/64dy3tL3/1/
左上方为子孙后代,即使它没有回答这个问题。
你不应该回归$.Deferred().resolve()
- 这没有任何意义。您需要分别从promise()
和$.Deferred()
返回resolve()
。