web-dev-qa-db-ja.com

JavaScript-jQueryインターバル

JQueryでJavaScriptを使用しています。 30秒ごとにhiに警告する次のスクリプトがあります。

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

ページが読み込まれたとき(ドキュメント/ページが完全に読み込まれたとき)およびその後30秒ごとにhiに警告したい(hi(0s)-hi(30s)-hi(60s)など)。しかし、私のソリューションは2つのインスタンスで機能します。 1つはDOM対応で、もう1つはループ内です。同じことを単一のインスタンスで行う方法はありますか?

私のフィドルここを見ることができます。

11

代わりにsetTimeoutを使用して、コールバック自体を再スケジュールすることができます。

$(function() {
    sayHi();

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

関数でコードをラップします。次に、関数を最初の引数として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();
});
9
Rob W

たぶん、たった1回の呼び出しでそれを行う方法があるでしょう。

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

別の解決策は、arguments.calleeを使用することですが、現在は非推奨であるため、一般的には使用しないことをお勧めします。

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

いいえ、それはsetIntervalでは不可能です。たとえば、setTimeoutを使用できます。

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

$(function() {
    foo();
});
1
Darin Dimitrov
$(function() {

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

    heythere();

});

30秒後に1回だけ実行する場合は、setTimeoutではなくsetIntervalを使用することを検討しています。

1
daryl