设置间隔和负载

发布于 2024-11-17 05:37:35 字数 532 浏览 2 评论 0原文

我认为这是一个基本的jquery问题,但它很烦人。这就是我正在做的:

  1. 从 jquery 加载 href class="tab" 列出文件(外部),
  2. 单击 href 并再次从外部文件加载
  3. setinterval 1000 使用 load() 刷新结果 (2)方法再次

问题是:在刷新期间,名称选择器的值每 1 秒更改一次(因为刷新),我最近单击了 #1 中的 href。

$('a.tab').live('click',function() {
    var value = $(this).attr('name');
    //....
    setInterval(function(){
        $("div#timed").load('retriever.php', {"update":value} );
    } ,1000);//set interval
    //....
    $(this).undelegate('click');
});

This is a basic jquery problem I think, but it is very annoying. This is what I am doing:

  1. load a href class="tab" lists file (external) from jquery
  2. click on href and load from external file again
  3. setinterval 1000 refresh the results (2) with load() method AGAIN

Question is: At refresh period, the value for name selector changes every 1 second (because of refresh), that I recently clicked the hrefs from #1.

$('a.tab').live('click',function() {
    var value = $(this).attr('name');
    //....
    setInterval(function(){
        $("div#timed").load('retriever.php', {"update":value} );
    } ,1000);//set interval
    //....
    $(this).undelegate('click');
});

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

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

发布评论

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

评论(1

海夕 2024-11-24 05:37:35

我认为当您开始一个新的间隔计时器时,您想取消其他间隔计时器。

编辑 - 哎呀等一下我正在修复它......好的谢谢@kingjiv!

$('a.tab').live('click',function() {
    var value = $(this).attr('name');
    var timers = $('body').data('timers') || {};
    //....
    for (var n in timers) clearInterval(timers[n]);

    timers[value] = setInterval(function(){
        $("div#timed").load('retriever.php', {"update":value} );
    } ,1000);//set interval
    //....
    $(this).undelegate('click');
    $('body').data('timers', timers);
});

正如其他人所说,“undelegate()”调用可能没有按照您的想法/想要的进行。

再次编辑——这可以更智能地完成;当然,实际上只需要一个计时器ID存储在主体上。我有时有点慢。

I think that you want to cancel the other interval timers when you start a new one.

edit — oops hold on I'm fixing it ... ok thanks @kingjiv!!

$('a.tab').live('click',function() {
    var value = $(this).attr('name');
    var timers = $('body').data('timers') || {};
    //....
    for (var n in timers) clearInterval(timers[n]);

    timers[value] = setInterval(function(){
        $("div#timed").load('retriever.php', {"update":value} );
    } ,1000);//set interval
    //....
    $(this).undelegate('click');
    $('body').data('timers', timers);
});

As others have said, that "undelegate()" call is probably not doing what you think/want.

edit again — this could be done more intelligently; there really only needs to be one timer id stored on the body, of course. I'm kind-of slow sometimes.

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