一个函数进入另一个函数jquery

时间:2012-10-02 10:07:50

标签: jquery function

我的问题可能很简单,但我无法通过互联网找到答案,所以我在这里问:

我有以下代码:

function TriggerHeader() {
//doing great stuff
}
function TriggerSlider() {
//doing other stuff
}

在检查完所有条件之后,我有一个调用正确触发器的函数。

function Action() {
    $(".content").fadeOut("fast",function () {
    TriggerSlider() {
        TriggerHeader();
    };
});
}

所以当(“。content”)。fadeOut结束时调用TriggerSlider()(因为我希望它) 但我正在寻找调用TriggerHeader()的正确方法;当TriggerSlider()结束时。我写它的方式是错的,但我不知道为什么。 有人能让我高兴吗?

4 个答案:

答案 0 :(得分:1)

这些行在语法上是不正确的:

TriggerSlider() {
    TriggerHeader();
};

完成后,您必须调整TriggerSlider函数以允许回调:

function TriggerSlider(callback) {
    // do stuff
    // ... 
    // now invoke the callback: 
    callback();
    // or pass it to a jQuery function
}

现在您可以像这样设置链:

function Action() {
    $(".content").fadeOut("fast",function () {
        TriggerSlider(TriggerHeader);
    });
}

答案 1 :(得分:1)

取决于TriggerSliderTriggerHeader的内容。

如果它们是同步的:

TriggerSlider();
TriggerHeader();

如果TriggerSlider有一个带回调的动画:

function TriggerSlider(callb) {
   //Most of your code here
   $("element").slideUp(callb);
}
TriggerSlider(TriggerHeader);

使用Promise API

function TriggerSlider() {
   //Most of your code here
   return $("element").slideUp();
}
$.when(TriggerSlider()).done(TriggerHeader);

答案 2 :(得分:0)

这实际上取决于TriggerSlider()TriggerHeader()的实施方式。如果他们不做任何涉及超时和“单独线程”的事情,他们会一个接一个地打电话:

TriggerSlider();
TriggerHeader();

- )

另一方面,如果TriggerSlider()包含动画或其他异步内容,则需要将其完成回调作为函数的参数实现:

function TriggerSlider(completionCallback) {
  setTimeout(500, function() {
    // do something
    // and finally
    completionCallback();
  }
}

现在您可以调用TriggerSlider并将其传递给函数以调用完成:

TriggerSlider(TriggerHeader);

请注意,我没有传递TriggerHeader(),因为这会调用该函数并返回结果。我将函数作为函数传递,函数调用发生在TriggerSlider

答案 3 :(得分:0)

您遇到的问题是,您正在尝试重新定义Triggerslider在您编写TriggerSlider() { //code }时所执行的操作。这在语法上是不正确的。

如果你想在滑块之后执行标题功能,这应该可行。

function TriggerHeader() {
  //doing great stuff
}

function TriggerSlider() {
  //doing other stuff
  TriggerHeader();
}
function Action() {
   $(".content").fadeOut("fast",function () { TriggerSlider();});
}

还有其他方法可以使用回调来解决此问题。但是如果你总是想要触发相同的功能,那么这应该有效。