我有这个javascript:
triggerAnimation(listItem,toggleToggleRadioListItem(listItem));
function triggerAnimation(listItem,passThruFunction){
listItem.find(".inlineLoading").show();
// pause and then call the toggle function
$("body").animate({opacity: 1}, 1000,
function(){
alert("a");
passThruFunction;
}
);
}
function toggleToggleRadioListItem(listItem) {
alert("b");
};
应该发生什么:
基于以上所述,我希望警报A出现在警报B之前,但事实并非如此。发生的事情是(看起来)一旦调用triggerAnimation()就会调用警报B.这是为什么?我怎样才能实现这种行为?
答案 0 :(得分:6)
您可以通过传入函数并稍后调用它来延迟执行。
triggerAnimation(listItem, function () {
toggleToggleRadioListItem(listItem)
});
function triggerAnimation(listItem,passThruFunction){
listItem.find(".inlineLoading").show();
// pause and then call the toggle function
$("body").animate({opacity: 1}, 1000,
function(){
alert("a");
passThruFunction();
}
);
}
function toggleToggleRadioListItem(listItem) {
alert("b");
};
答案 1 :(得分:2)
好吧,您可以传递函数引用和参数数组来触发动画,然后在执行时传递给passThruFunction。 在Javascript中,传递给函数的内容将始终在函数代码实际执行之前进行评估,这就是为什么首先得到警报(“b”)的原因。 多数民众赞成繁忙评估[功能参数],顺便说一句。
答案 2 :(得分:1)
因为您在致电toggleToggleRadioListItem(listItem)
时致电triggerAnimation(listItem,toggleToggleRadioListItem(listItem));
,请先执行toggleToggleRadioListItem(listItem)
。
答案 3 :(得分:1)
eduffy's回答是可行的最简单的事情,并且会有所帮助。如果你想要一些更硬的东西,安静阅读partial application可能会给你另一种技术添加到你的工具带。