【问题标题】:Wait for one function to return a value before proceeding to the rest of the other function's commands [closed]等待一个函数返回一个值,然后再继续执行其他函数的其余命令[关闭]
【发布时间】:2012-10-16 01:27:00
【问题描述】:

我正在将 jquery 中的一些动画与一些 ajax 加载相结合 - 从函数 A,我希望能够调用函数 B 以淡出当前内容,一旦该动画完成,返回运行其余代码在功能A中。这可能吗?我正在想象这样的事情:

function buttonClicked(){
  if(sectionHidden != true){
    hideSection($sectionRef);
  }
  //RUN THE FOLLOWING AFTER HIDE SECTION HAS FINISHED (FUNCTION B)
  loadSection();
}

function hideSection($sectionRef){
  $sectionRef.fadeTo(500,0,function(){
    return someValue;
  });
}

由于我的代码中的一些其他复杂性(多个函数调用 hideSection),我无法从 hideSection 调用 loadSection。

【问题讨论】:

    标签: javascript jquery ajax callback return


    【解决方案1】:

    .fadeTo() 带有一个回调参数,当淡出完成时调用该参数。您所要做的就是为其提供loadSection 函数。也就是说:

    function buttonClicked() {
        if (!sectionHidden) {
            hideSection($sectionRef, loadSection);
        }
        else {
            loadSection();
        }
    }
    
    function hideSection($sectionRef, doneCallback) {
        $sectionRef.fadeTo(500, 0, doneCallback);
    }
    

    如果您不想在从代码的另一部分调用 hideSection() 后加载该部分:

    function someStuff() {
        //stuff...
       hideSection($superRef); //won't call loadSection()
       //more stuff
    }
    

    【讨论】:

    • 抱歉 - 由于网站中存在许多其他问题,我无法这样处理。
    • 我笑了。好一个。巨魔很多
    • 你能解释一下为什么吗?最终,您要么必须这样做(传递回调),要么执行某种非常笨拙的轮询机制
    • 嗯......没有太多的解释。如果您想在调用hideSection() 之后发生某些事情,那么最合乎逻辑的事情不是将该函数赋予hideSection() 吗?并非每次调用hideSection() 都必须调用loadSection - 使用我的解决方案,您可以决定要给它什么回调,或者根本不给它。
    • @PeeHaa:你认为 mheavers 是在拖钓吗?
    【解决方案2】:

    很遗憾,这不是 javascript 的工作方式。 在 JS 中,您的代码不应阻塞。 改用回调:在函数 A 中调用 fadeTo 并在回调中提供函数 A 的其余部分。当 fadeTo 完成时调用回调。

    来自jquery fadeTo()

    $('#clickme').click(function() {
        $('#book').fadeTo('slow', 0.5, function() {
          // Animation complete.
        });
      });
    

    编辑:您的代码应该看起来像这样......

    function buttonClicked(){
      if(sectionHidden != true){
        hideSection($sectionRef, function(){
          loadSection();
        });
      }
    }
    
    function hideSection($sectionRef, func){
      $sectionRef.fadeTo(500,0,func);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2020-10-30
      • 2019-10-29
      • 1970-01-01
      • 2013-03-31
      相关资源
      最近更新 更多