javascript setTimeout или jQuery delay-ни один из них не работает для меня

у меня есть 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 ответов


в случае 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);

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

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

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

});

посмотреть его.

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


setTimeout(sale, 3000);

раньше вы проходили мимо setTimeout возвращаемое значение sale. Это проходит само.


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

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


setTimeout("sale();", 3000);