【问题标题】:Jquery wait and click more timesJquery 等待并单击更多次
【发布时间】:2011-08-22 11:46:15
【问题描述】:

我有一个问题,因为我不明白。

我想在使用 jquery 显示下一个选项卡和编写如下代码之间等待:

$('#tabs ul .ui-corner-top').each(function(){
    setTimeout(function(){},2000)
    $(this).children('a').click();
});

如果单击下一个选项卡,我预计会等待 2 秒。 但是超时只开始一次,所有hrefs都会立即点击而无需等待。

然后我尝试了一些不同的东西:

for (i=0;i<$('#tabs ul .ui-corner-top').size();i++) {
    setTimeout('changeTab(i)',i*3000);
}

function changeTab(i) {
    clearTimeout(timeout);
    timeout=setTimeout(function(){
        $('#mainContent').masonry();
    }, 1500);
    tablink='a[href*="#tabs-'+i+'"]';
    $(tablink).click();
}

超时在这里起作用,但我不知道为什么。在这里,我只剩下立即点击的问题。它不会等到单击下一个选项卡。

有人可以帮忙吗?

提前致谢


我完全写了奇怪的东西......对不起......这是我的实际代码,它几乎可以工作:

for (i=0;i<$('#tabs ul .ui-corner-top').size();i++) {
    tablink='a[href*="#tabs-'+i+'"]';
    setTimeout('changeTab(tablink)',i*3000);
}

function changeTab(tablink) {
    $(tablink).click();
}

但他只点击了第三个选项卡 (#tabs-2) 3 次,而不是像我想要的那样每个选项卡一次 (1,2,3)。为了解释它:我想在选项卡(jquery ui选项卡)之间自动切换,等待下一次点击。

【问题讨论】:

  • 您能重新表述一下您要完成的工作吗?你的问题不是很清楚。此外,您应该将函数而不是字符串传递给 setTimeout()setInterval()
  • 看我的编辑,我想我已经弄清楚你在追求什么。您实际上需要将tablink 变量传递给changeTab,现在它只是字符串的一部分。正如我之前所说,不要将字符串传递给setTimeout

标签: jquery timeout click wait


【解决方案1】:

如果我理解您的要求...您有许多选项卡要通过计时器进行处理,但是您的查询过于贪婪。

您要做的是让您的集合以不同的偏移量调用它们中的每一个。

很便宜,你可以做这样的事情......

    var tabs = $(this).children('a');
    var numberOfTabs = tabs.length;
    for (var item = 0; item < numberOfTabs; item++)
    {
        window.setTimeout(function(){tabs[item].click();},2000*item);
    }

您必须记住,JQuery 返回与您的查询匹配的结果数组,并且计时器不是按顺序初始化的。定义计时器声明时,它会立即开始倒计时。您只是要求 JQuery 为要同时激活的每个结果启动一个计时器。

【讨论】:

  • 这似乎非常好,但我收到错误“未捕获的类型错误:无法调用未定义的方法“点击”。在标签中我有这个 '[ ​1​​, ​2​​, ​3​​ ]'
  • 当您通过索引访问 jQuery 对象的元素时,例如 tabs[item],您将返回底层 DOM 元素,而不是 jQuery 包装的 DOM 元素。你必须这样做$(tabs[item]).click()
  • 你知道这怎么可以无限循环吗?就像从第一个标签再次重复它......无限循环?
  • function doTabSlide(){ $('#tabs ul .ui-corner-top').each(function (i) { setTimeout(function () { $('a[href*=" #tabs-'+(i+1)+'"]').click(); if( (i+1)==$('#tabs ul .ui-corner-top').size() ){ setTimeout(function (){doTabSlide()}, 300); } }, i*300); }); }; doTabSlide();
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 2019-10-12
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
相关资源
最近更新 更多