javascript setTimeout не делает то, что я ожидаю - PullRequest
1 голос
/ 29 февраля 2012
function myfunction()
  {
  window.setTimeout(alert('I waited for you.'),700000000);
  }

Я вызываю функцию, подобную этой, и сразу же получаю предупреждение: «Я ждал тебя».

Сначала я ввел 7000 в качестве второго аргумента, но продолжал выдвигать его, если это было что-то, кроме секунд. Я, очевидно, хочу, чтобы функция делала что-то еще, но я разбил ее на этот упрощенный пример, чтобы доказать себе, в чем проблема.

В чем моя ошибка?

Ответы [ 6 ]

3 голосов
/ 29 февраля 2012

Вы должны передать ссылку на функцию, а не результат выполнения alert() следующим образом:

function myfunction() {
    window.setTimeout(function() {alert('I waited for you.')},700000000);
}

Когда вы передаете alert('I waited for you.') в setTimeout(), вы говорите интерпретатору javascriptвыполнить alert('I waited for you.') и затем передать возвращаемый результат в setTimeout().Поскольку это немедленно выполняет оператор alert(), а оповещение не возвращает функцию для использования setTimeout(), это явно не то, что вам нужно.

Вместо этого вы хотите передать ссылку на функцию в setTimeout().Это можно сделать либо с помощью анонимной функции, как в примере, который я предоставил выше, либо с помощью отдельной именованной функции, например:

function myAlert() {
    alert('I waited for you.');
}

function myfunction() {
    window.setTimeout(myAlert, 700000000);
}

Примечание: для более сложного использования вы можете фактически передатьнемедленно выполняемая функция до setTimeout(), пока эта функция возвращает ссылку на функцию, которую setTimeout() может вызвать позже.Но это явно не тот случай, когда вы пытаетесь здесь использовать alert()

2 голосов
/ 29 февраля 2012

Оберните его в анонимную функцию, например:

function myfunction(){
    window.setTimeout(function(){alert('I waited for you.')},700000000);
}

Вот пример jsFiddle (с более управляемой задержкой в ​​3 секунды).

2 голосов
/ 29 февраля 2012

Вы должны сделать

function makeAlert(){
  alert('I waited for you.')
}

window.setTimeout(makeAlert,700000000);

в противном случае оповещение () выполняется немедленно

2 голосов
/ 29 февраля 2012

попробуйте это

function myfunction() {
  window.setTimeout( function(){alert('I waited for you.');}, 700000000);
}

В вашем коде функция вызывается сразу.Если вы хотите выполнить позже, вы должны передать ссылку на функцию, а не вызов функции в setTimeout.

0 голосов
/ 29 февраля 2012

Я обнаружил, что если я поставлю кавычки вокруг первого аргумента, это работаетВот что я на самом деле сделал:

function divhide()
  {
  window.setTimeout("realhide()",7000);
  }

function realhide(){
  var mydiv = document.getElementById("mydiv");
  mydiv.style.display="none";
  mydiv.innerHTML="";
}
0 голосов
/ 29 февраля 2012

Вы можете просто обернуть alert('I waited for you.') в кавычки " так:

function myfunction() 
  { 
  window.setTimeout("alert('I waited for you.')",7000); 
  } 

Число - это количество миллисекунд ожидания, поэтому 7000 - это 7 секунд.

См. http://jsfiddle.net/Ac5Xf/

...