JavaScript - интервал jQuery

Я использую JavaScript с jQuery. У меня есть следующий script для оповещения hi каждые 30 секунд.

$(document).ready( function() {
    alert("hi");
setInterval(function() {
    alert("hi");
}, 30000);
});

Я хочу предупредить hi, когда страница загружается (когда документ/страница полностью загружается) и через каждые 30 секунд после этого (например, hi (0s) - hi (30s) - hi ( 60 с) и т.д.). Но мое решение работает в двух случаях. Один на DOM готов, а другой в цикле. Есть ли способ сделать то же самое в одном экземпляре?

Вы можете увидеть мою скрипту здесь.

Ответ 1

Вместо этого вы можете использовать setTimeout и выполнить перепланировку обратного вызова.

$(function() {
    sayHi();

    function sayHi() {
       setTimeout(sayHi,30000);
       alert('hi');
    }
});

Ответ 2

Оберните свой код в функцию. Затем передайте функцию в качестве первого аргумента в 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();
});

Ответ 3

Ну, возможно, есть способ сделать это одним звонком.

setInterval(
    (function x() {
        alert('hi');
        return x;
    })(), 30000);

Другим решением будет использование arguments.callee, но поскольку он теперь устарел, его обычно не рекомендуется использовать.

setInterval(
    (function() {
        alert('hi');
        return arguments.callee;
    })(), 30000);

Ответ 4

Нет, это невозможно при setInterval. Вы можете использовать setTimeout, например:

function foo() {
    alert('hi');
    setTimeout(foo, 30000);
}

$(function() {
    foo();
});

Ответ 5

$(function() {

    function heythere() {
        alert('hi');
        setTimeout(heythere,30000);
    }

    heythere();

});

Если вы хотите, чтобы он запускался только один раз через 30 секунд, вы хотите использовать setTimeout not setInterval.