目前我已将其设置为这样,
var elements = $('#one, $two, #three, #four, #six');
var _temp = 0;
elements.hide(0, function(){
/* by default, the callback will be performed to
every single element in stack */
_temp++; // increment temporary cache
// perform actual callback only on last in list
if (_temp == elements.length) {
// do stuff
}
});
但感觉不对,因为如果我想为下面的另一回调241行做同样的事情,我必须重置_temp
,好吧,全局变量只是凌乱。
我怎样才能简化这个?
答案 0 :(得分:3)
一种可能的方法是使用闭包:
var elements = $('#one, $two, #three, #four, #six');
elements.hide(0, (function(){
var _temp = 0;
return function(){
_temp++; // increment temporary cache
// perform actual callback only on last in list
if (_temp == elements.length) {
// do stuff
}
};
})());
如果您想更频繁地使用此模式,您可以创建一个返回回调的函数。
另请注意,.hide()
的持续时间为第一个参数。
答案 1 :(得分:1)
尝试在函数中使用静态变量。
答案 2 :(得分:0)
还有另一种没有临时变量的方法,它可能对某些人来说可读性稍差,并迫使你将你的选择存储在一个变量中,但是:
elements.hide(0, function(){
// if last callback (compare raw DOMElements, because jQuery object aren't somehow similar)
if ($(this)[0] === elements.last()[0]) {
// do stuff
}
});
缩小一些线条,并做到这一点。