使用.fadeOut()多次返回函数而不是一次;

时间:2013-09-24 18:58:26

标签: javascript jquery

我不知道是否允许这样做,但我想这是......

我一开始认为我的整个脚本可能有问题,我设法在localhost上创建新文件并仅测试fadeOut();函数。

显然它再次返回两次功能所以我去了jsfiddle检查那里会发生什么。同样的事情发生了。在这种情况下,console.log();返回了两次。

  • 我做了什么以及我想做什么?

我想要返回指定的函数,或者在小提琴样本中,只指定console.log();一次。然而,我正在褪色多个元素(两个,确切地说)。

有没有办法做到这一点,而不是同时将每个元素复制到fadeOut?

将返回console.log()的示例;两次。

setTimeout(function () {

    $( ".one, .two" ).fadeOut(300, function () {
        console.log("Return Function!");
    });

}, 2000);

将返回console.log()的示例;一次。

setTimeout(function () {

    $( ".one" ).fadeOut(300);

    $( ".two" ).fadeOut(300, function () {
        console.log("Return Function!");
    });

}, 2000);

小提琴预览: Fiddle Redirect

4 个答案:

答案 0 :(得分:5)

集合中有两个元素,因此fadeOut被调用两次,所以是的,应该这样做。

通过使用动画中返回的保证$.when$.then

,无论集合中的元素数量是多少,您都可以只触发一次回调
setTimeout(function () {

    $.when( $( ".one, .two" ).fadeOut(300) ).then(function () {
        console.log("Return Function!");
    });

}, 2000);

FIDDLE

答案 1 :(得分:3)

也许一个简单的旗帜就足够了?特别是如果您想在第一个完成后立即登录控制台(无论出于何种原因):

var already_returned = false;
setTimeout(function () {
    $( ".one, .two" ).fadeOut(300, function () {
        if (!already_returned) {
            already_returned = true;
            console.log("Return Function!");
        }
    });
}, 2000);

答案 2 :(得分:0)

需要查看你的HTML,但在我看来你可能有多个分配了“2”类的元素 - 这可以解释为什么在第二个例子中你会得到2个日志行......

在第一个例子中,你可能(并且可能是)选择2个元素(一个类为“one”,另一个类为“two”)。

答案 3 :(得分:0)

我出于好奇而检查了这一点,我的控制台显示了两个不同的javascript声明:

Return Function! fiddle.jshell.net/dvLden/ApUYq/show/:38
Return Function! fiddle.jshell.net:38

显然,小提琴运行两次。 如果您浏览到http://fiddle.jshell.net/dvLden/ApUYq/show/:38,您将只在控制台中获得一个“返回功能”。