这是如何使用时常见的错误jQuery.when()
.
jQuery.when()
需要承诺作为论据。它没有神奇的力量来知道你传递给它的函数何时以某种方式完成。这些函数必须返回底层代码完成后已解决或拒绝的承诺,然后您可以将这些承诺传递给jQuery.when()
.
Your ResetMenu()
函数不返回任何内容,因此,您的jQuery.when()
不等待任何事情。它执行.then()
立即处理程序(看起来这不是您想要的)。
所以,在这一行中:
jQuery.when(ResetMenu()).done(OpenSubmenu());
ResetMenu()
必须返回一个承诺jQuery.when()
知道什么时候完成。
你可以修复ResetMenu()
通过这样做来以这种方式工作:
function ResetMenu(){
return jQuery(".mobile-menu").find(".sub-menu").slideUp(100).promise().then(function() {
// remove this class when the animation has completed
jQuery(".mobile-menu").find(".menu-item-has-child").removeClass("open");
});
};
然后,进一步,您需要更改将函数传递给的方式.done()
对此,这两者都使其成为可以稍后执行的函数引用并绑定适当的this
对它的价值:
jQuery.when(ResetMenu()).done(OpenSubmenu.bind(this));
注意,.bind(this)
假设this
是合适的值。您可以传递任何正确的值,这将成为this
内的值OpenSubmenu()
当它被执行时。