2010-11-24 2 views
6

У меня есть div как этоJavascript SetTimeout или задержка JQuery - ни работают для меня

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

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

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

и

setTimeout(sale(), 3000); 

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

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

Почему это не будет работать?

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

+0

`setTimeout (sale, 3000);`, а не `setTimeout (sale(), 3000);` – Reigel 2010-11-24 01:37:51

+2

Метод `.delay()` был добавлен в `jQuery 1.4`. Какую версию ты используешь? – user113716 2010-11-24 01:46:38

ответ

15

В случае 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

Вам необходимо быть в очереди на delay().

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

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

}); 

See it.

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

+0

delay() не может быть * первым * элементом цепочки анимации? – AndreKR 2010-11-24 01:36:25

+0

@AndreKR - Да, может. Этот ответ неверен. http://jsfiddle.net/patrick_dw/Uts7t/ – user113716 2010-11-24 01:42:29

+0

@patrick dw Я мог * присягнуть * Недавно я прочитал, что вам нужно быть в `queue()` for `delay()`, чтобы работать ... О, хорошо. Это недавняя разработка jQuery? – alex 2010-11-24 01:43:43

0
setTimeout(sale, 3000); 

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

0

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

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

Смежные вопросы