javascript setTimeout или jquery delay - ни один из них не работает для меня - PullRequest
6 голосов
/ 24 ноября 2010

У меня есть div, как это

<div id="sale">
    ........
</div>

и я попытался использовать оба

$('#sale').delay(3000).slideDown(500);

и

setTimeout(sale(), 3000);

function sale() {
    $('#sale').slideDown(500);
}

но ни один из них не работает. Задержка jQuery говорит о том, что $('#sale').delay() не является функцией, а способ setTimeout говорит о бесполезном вызове setTimeout (пропущенные кавычки). Если я добавлю двойные кавычки вокруг вызова sale(), он просто скажет: «Продажа не определена».

Почему ничего из этого не работает?

Все, что я пытаюсь сделать, это заставить div появляться через 3 секунды после загрузки страницы.

Ответы [ 5 ]

15 голосов
/ 24 ноября 2010

В случае setTimeout вы просто делаете это неправильно.

setTimeout(sale(), 3000); // will call sale and use the RETURN value in the callback but sale returns undefined

Вам необходимо передать в функцию:

function sale() {
    $('#sale').slideDown(500);
}

setTimeout(sale, 3000); // just pass in the reference to sale()

Другая возможность:

// no difference in this case
// Note: if it were obj.sale() then you would need to do this version
//       otherwise sale() will get called with the this set to window
setTimeout(function(){sale()}, 3000) 

И последнее, но не менее важное:

setTimeout(function() { $('#sale').slideDown(500); }, 3000);
6 голосов
/ 24 ноября 2010

Вам нужно быть в очереди, чтобы delay() заработал.

$('#sale').queue(function() {

   $(this).delay(3000).slideDown(500).dequeue();

});

Смотри.

Патрик Dw сообщил в комментариях, что вам не нужно быть в queue(), если ваша следующая цепочка методов - анимация. Смотри его JSFiddle .

0 голосов
/ 24 ноября 2010
setTimeout("sale();", 3000);
0 голосов
/ 24 ноября 2010

В вашем первом решении кажется, что jQuery даже не загружен.

Во втором коде вы должны сделать setTimeout(sale, 3000); (опустить скобки), потому что с ними вы вызываете setTimeout с вернуть из sale(), что составляет undefined.

0 голосов
/ 24 ноября 2010
setTimeout(sale, 3000);

Ранее вы передавали setTimeout возвращаемое значение из sale.Это передает фактическую функцию.

...