5

我有这个 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");
};

应该发生什么:

  • triggerAnimation 被称为传递一个对象和一个函数
  • triggerAnimation 做一个虚拟动画(创建一个暂停),然后引发一个警报并触发一个回调函数,该函数执行通过的函数。
  • 通过的函数称为引发警报。

基于上述,我希望警报 A 出现在警报 B 之前,但事实并非如此。发生的情况是(似乎)警报 B 在调用 triggerAnimation() 后立即被调用。这是为什么?我怎样才能实现这种行为?

4

4 回答 4

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");
};
于 2009-11-12T23:43:00.450 回答
2

好吧,您可以传递函数引用和一组参数来触发动画,然后在执行时将其传递给 passThruFunction。在 Javascript 中,传递给函数的内容总是会在函数代码实际执行之前被评估,这就是为什么你首先得到你的 alert("b") 的原因。那就是所谓的忙评估[函数参数],顺便说一句。

于 2009-11-12T23:42:26.377 回答
1

eduffy 的答案是最简单的可行的方法,并且会很有效。如果你想要更硬核的东西,安静地阅读部分应用程序可能会给你另一种技术来添加到你的工具带中。

于 2009-11-12T23:49:38.610 回答
1

因为你在调用的toggleToggleRadioListItem(listItem)时候调用了triggerAnimation(listItem,toggleToggleRadioListItem(listItem));,然后toggleToggleRadioListItem(listItem)先执行。

于 2009-11-12T23:41:49.377 回答