如何通过jQuery中的SetTimeout函数传递元素ID?

时间:2012-01-07 02:20:44

标签: jquery settimeout

我想通过下面的函数传递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括号内为函数设置变量。有什么想法吗?

2 个答案:

答案 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”中的范围变量,而是一个完全不同的范围。