我想通过下面的函数传递id1,id2和id3。这很好用:
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);
};
如何让第二个工作?我的想法是我需要在id周围加上一些标点符号。或者我可以在setTimeout括号内为函数设置变量。有什么想法吗?
答案 0 :(得分: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()
放入一个setTimeout()
;它会做同样的事情,因为你的所有超时都会同时触发(300毫秒)。如果您的ID是字符串,您也可以这样做:
function doSomething(id1, id2, id3) {
setTimeout(function() {
$(id1 + ', ' + id2 + ', ' + id3).fadeIn('slow', 0.25);
}, 300);
};
虽然它有点乱,但$.add()
可能会有所作为。
答案 1 :(得分: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”中的范围变量,而是一个完全不同的范围。