延迟函数在IE中使用jQuery 1.12并不像预期的那样工作

时间:2016-02-01 19:09:35

标签: javascript jquery internet-explorer

我有两个函数,我试图运行一个函数,然后另一个函数。我在我的代码中实现了这一行:

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>

1 个答案:

答案 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()