JavaScript - jQuery 间隔

发布于 2024-12-06 09:56:29 字数 507 浏览 2 评论 0原文

我正在使用 JavaScript 和 jQuery。我有以下脚本每 30 秒提醒 hi 一次。

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

我想在页面加载时(当文档/页面完全加载时)以及之后每隔 30 秒的时间间隔发出警报 hi (例如 hi(0s) - hi(30秒)-(60秒)..等)。但我的解决方案适用于两个实例。一个在 DOM 上就绪,另一个在循环中。有什么方法可以在单个实例中执行相同的操作吗?

您可以在此处查看我的小提琴。

I am using JavaScript with jQuery. I have the following script to alert hi every 30 seconds.

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

I want to alert hi when the page loads (when document / page gets completely loaded) and on every 30 seconds interval afterwards (like hi(0s) - hi(30s) - hi(60s).. etc). But my solution works on two instances. One on DOM ready and the other in a loop. Is there any way to do the same in a single instance?

You can see my fiddle here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

幽蝶幻影 2024-12-13 09:56:29

您可以改用 setTimeout 并让回调本身重新安排时间。

$(function() {
    sayHi();

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

You could use setTimeout instead and have the callback reschedule itself.

$(function() {
    sayHi();

    function sayHi() {
       setTimeout(sayHi,30000);
       alert('hi');
    }
});
好多鱼好多余 2024-12-13 09:56:29

将您的代码包装在函数中。然后,将该函数作为第一个参数传递给 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();
});

Wrap your code in a function. Then, pass the function as a first argument to setInterval, and call the function:

$(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();
});
凉薄对峙 2024-12-13 09:56:29

嗯,可能有一种方法只需一次调用即可完成此操作。

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

另一种解决方案是使用arguments.callee,但由于它现在已被弃用,因此通常不建议使用它。

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

Well, there probably is a way of doing it in just one call..

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

Another solution would be to use arguments.callee, but as it is now deprecated, it is generally not recommended to use it.

setInterval(
    (function() {
        alert('hi');
        return arguments.callee;
    })(), 30000);
千秋岁 2024-12-13 09:56:29

不,setInterval 不可能做到这一点。您可以使用 setTimeout 例如:

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

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

No, that's not possible with setInterval. You could use setTimeout for example:

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

$(function() {
    foo();
});
喜爱皱眉﹌ 2024-12-13 09:56:29
$(function() {

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

    heythere();

});

如果您希望它仅在 30 秒后运行一次,您需要使用 setTimeout 而不是 setInterval

$(function() {

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

    heythere();

});

If you want it to only run once after 30 seconds, you are looking to use setTimeout not setInterval.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文