2012-01-07 66 views
1

我想通过下面的函数传递id1,id2和id3。这只是正常:如何通过jQuery中的SetTimeout函数传递元素ID?

function doSomething(id1,id2,id3) { 
    $(id1).fadeIn('slow',.25); 
    $(id1).fadeIn('slow',.25); 
    $(id1).fadeIn('slow',.25); 
}; 

但是,这并不工作:

function doSomething(id1,id2,id3) { 
    setTimeout(" $(id1).fadeIn('slow',.25) ", 300); 
    setTimeout(" $(id1).fadeIn('slow',.25) ", 300); 
    setTimeout(" $(id1).fadeIn('slow',.25) ", 300); 
}; 

我如何获得第二个工作?我的想法是我需要一些标点符号。或者,也许我可以在setTimeout括号内为函数设置一个变量。有任何想法吗?

回答

5

setTimeout()评估一个字符串是个坏习惯。相反,使用匿名函数:

function doSomething(id1, id2, id3) { 
    setTimeout(function() { 
     $(id1).fadeIn('slow', 0.25); 
     $(id2).fadeIn('slow', 0.25); 
     $(id1).fadeIn('slow', 0.25); 
    }, 300); 
}; 

请注意,我已经把你的所有fadeIn() s转换一个setTimeout();它会执行相同的操作,因为所有的超时都会同时触发(300毫秒)。如果你的ID是字符串,你可以这样做太:

function doSomething(id1, id2, id3) { 
    setTimeout(function() { 
     $(id1 + ', ' + id2 + ', ' + id3).fadeIn('slow', 0.25); 
    }, 300); 
}; 

虽然这是一个有点乱,但$.add()可能做的伎俩。

3

setTimeout接受函数回调和超时。通过用引号包装你的函数调用,你传递给它一个字符串。试试这个:

function doSomething(id1,id2,id3) { 
    setTimeout(function() { 
     $(id1).fadeIn('slow',.25); 
     $(id2).fadeIn('slow',.25); 
     $(id3).fadeIn('slow',.25); 
    }, 300); 
}; 

编辑: 作为@nnnnnn指出,一个字符串可以通过,但它是一个坏idea。实质上,当你传入一个字符串时,它会被调用者的特权所调用,因此将不能访问“doSomething”中的范围变量,而是一个完全不同的范围。

+1

将一个字符串传递给'setTimeout'本身并不是错误的 - 它肯定是有效的语法。字符串语法的问题在于,字符串中的代码不会在正确的作用域中运行,以便使用本地'id1'和其他参数,这些代码可以修复您的代码。 – nnnnnn 2012-01-07 02:43:34

相关问题