Ответ 1
Вместо этого вы можете использовать setTimeout и выполнить перепланировку обратного вызова.
$(function() {
sayHi();
function sayHi() {
setTimeout(sayHi,30000);
alert('hi');
}
});
Я использую JavaScript с jQuery. У меня есть следующий script для оповещения hi
каждые 30 секунд.
$(document).ready( function() {
alert("hi");
setInterval(function() {
alert("hi");
}, 30000);
});
Я хочу предупредить hi
, когда страница загружается (когда документ/страница полностью загружается) и через каждые 30 секунд после этого (например, hi
(0s) - hi
(30s) - hi
( 60 с) и т.д.). Но мое решение работает в двух случаях. Один на DOM готов, а другой в цикле. Есть ли способ сделать то же самое в одном экземпляре?
Вы можете увидеть мою скрипту здесь.
Вместо этого вы можете использовать setTimeout и выполнить перепланировку обратного вызова.
$(function() {
sayHi();
function sayHi() {
setTimeout(sayHi,30000);
alert('hi');
}
});
Оберните свой код в функцию. Затем передайте функцию в качестве первого аргумента в setInterval
и вызовите функцию:
$(document).ready( function() {
//Definition of the function (non-global, because of the previous line)
function hi(){
alert("hi");
}
//set an interval
setInterval(hi, 30000);
//Call the function
hi();
});
Ну, возможно, есть способ сделать это одним звонком.
setInterval(
(function x() {
alert('hi');
return x;
})(), 30000);
Другим решением будет использование arguments.callee, но поскольку он теперь устарел, его обычно не рекомендуется использовать.
setInterval(
(function() {
alert('hi');
return arguments.callee;
})(), 30000);
Нет, это невозможно при setInterval
. Вы можете использовать setTimeout, например:
function foo() {
alert('hi');
setTimeout(foo, 30000);
}
$(function() {
foo();
});
$(function() {
function heythere() {
alert('hi');
setTimeout(heythere,30000);
}
heythere();
});
Если вы хотите, чтобы он запускался только один раз через 30 секунд, вы хотите использовать setTimeout
not setInterval
.