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つはループ内です。同じことを単一のインスタンスで行う方法はありますか?
私のフィドルここを見ることができます。
代わりに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();
});
たぶん、たった1回の呼び出しでそれを行う方法があるでしょう。
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秒後に1回だけ実行する場合は、setTimeout
ではなくsetInterval
を使用することを検討しています。