Как передать идентификатор элемента через функции SetTimeout в jQuery? - PullRequest
1 голос
/ 07 января 2012

Я хочу передать 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);
};

Как мне заставить работать второй?Я думаю, мне нужна пунктуация вокруг идентификаторов.Или, возможно, я могу установить переменную для функции в скобках setTimeout.Есть идеи?

Ответы [ 2 ]

5 голосов
/ 07 января 2012

Это плохая практика, чтобы 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 мс). Если ваши идентификаторы являются строками, вы также можете сделать это:

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

Хотя это немного грязно, но $.add() может помочь.

3 голосов
/ 07 января 2012

setTimeout принимает функцию обратного вызова и время ожидания.Оборачивая вызов функции в кавычки, вы передаете ему строку.Попробуйте это:

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

РЕДАКТИРОВАТЬ : Как указала @nnnnnn, строку можно передать, но это плохая идея .По сути, когда вы передаете строку, она вызывается с привилегиями вызывающей стороны и, таким образом, не будет иметь доступа к переменным области видимости внутри «doSomething», но будет иметь совершенно другую область видимости.

...