<!DOCTPYE html>
<html>
<head>
<script>
var button = document.getElementById("reactionTester");
var start = document.getElementById("start");
function init() {
var startInterval/*in milliseconds*/ = Math.floor(Math.random() * 30) * 1000;
setTimeout(startTimer(), startInterval);
}
function startTimer() {
document.write("hey");
}
</script>
</head>
<body>
<form id="form">
<input type="button id=" reactionTester" onclick="stopTimer()">
<input type="button" value="start" id="start" onclick="init()">
</form>
</body>
</html>
Javascript setTimeout() не работает
Ответ 1
Эта строка:
setTimeout(startTimer(), startInterval);
Вы вызываете startTimer()
. Вместо этого вам нужно передать его в качестве функции для вызова, например:
setTimeout(startTimer, startInterval);
Ответ 2
Если вы находитесь в ситуации, когда вам необходимо передать параметры функции, которую вы хотите выполнить после истечения времени ожидания, вы можете обернуть "именованную" функцию в анонимную функцию.
т.е. работает
setTimeout(function(){ startTimer(p1, p2); }, 1000);
т.е. не сработает, потому что сразу вызовет функцию
setTimeout( startTimer(p1, p2), 1000);
Ответ 3
Две вещи.
-
Удалите скобки в
setTimeout(startTimer(),startInterval);
. Хранение скобок вызывает функцию немедленно. -
Функция startTimer перезапишет содержимое страницы с помощью
document.write
(без вышеупомянутого исправления) и вытрите script и HTML в процессе.
Ответ 4
Если вы хотите передать параметр задержанной функции:
setTimeout(setTimer, 3000, param1, param2);
Ответ 5
Измените свой код следующим образом:
<script>
var button = document.getElementById("reactionTester");
var start = document.getElementById("start");
function init() {
var startInterval/*in milliseconds*/ = Math.floor(Math.random()*30)*1000;
setTimeout(startTimer,startInterval);
}
function startTimer(){
document.write("hey");
}
</script>
Посмотрите, поможет ли это. В принципе, разница заключается в том, что вместо функции "startTimer" ссылается функция "startTimer".
Ответ 6
Чтобы сделать немного понятным, используйте ниже, который я предпочитаю больше всего. Также он позволяет сразу вызвать несколько функций. Очевидно,
setTimeout(function(){
startTimer();
function2();
function3();
}, startInterval);
Ответ 7
Использование:
setTimeout(startTimer,startInterval);
Вы вызываете startTimer() и передаете его результат (который является undefined) в качестве аргумента для setTimeout().