0

我不知道它是否应该这样做,但我想它是......

起初我认为我的整个脚本可能有问题,我设法在本地主机上创建新文件并测试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);

小提琴预览: 小提琴重定向

4

4 回答 4

5

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

无论集合中的元素数量如何,您都可以只触发一次回调,方法是使用动画返回的承诺,$.when并且$.then

setTimeout(function () {

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

}, 2000);

小提琴

于 2013-09-24T19:02:27.570 回答
3

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

var already_returned = false;
setTimeout(function () {
    $( ".one, .two" ).fadeOut(300, function () {
        if (!already_returned) {
            already_returned = true;
            console.log("Return Function!");
        }
    });
}, 2000);
于 2013-09-24T19:02:07.427 回答
0

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

在第一个示例中,您可能(并且可能是)选择 2 个元素(一个具有类“one”,另一个具有类“two”)。

于 2013-09-24T19:03:46.267 回答
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,您将在控制台中仅获得一个“返回函数”。

于 2013-09-24T19:06:34.003 回答