我不知道是否允许这样做,但我想这是......
我一开始认为我的整个脚本可能有问题,我设法在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
答案 0 :(得分:5)
集合中有两个元素,因此fadeOut
被调用两次,所以是的,应该这样做。
通过使用动画中返回的保证$.when
和$.then
setTimeout(function () {
$.when( $( ".one, .two" ).fadeOut(300) ).then(function () {
console.log("Return Function!");
});
}, 2000);
答案 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,您将只在控制台中获得一个“返回功能”。