2011-05-10 49 views
0

我有一個問題,因爲我不明白這一點。Jquery等待並點擊更多次

我想展示與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標籤),並等待下一次點擊。

+0

你能改述你想完成的事嗎?這不是你的問題。此外,你應該傳遞一個函數,而不是一個字符串到'setTimeout()'和'setInterval()'。 – 2011-05-10 13:45:29

+0

看到我的編輯,我想我已經知道你在做什麼。你需要將'tablink'變量傳遞給'changeTab',現在它只是一個字符串的一部分。就像我之前說過的,**不要將字符串傳遞給'setTimeout' **。 – 2011-05-10 14:03:15

回答

0

如果我明白你在問什麼......你有一些標籤,你想通過一個計時器來完成,但是你的查詢過於貪婪。

你想要做的就是讓你的收藏集用不同的偏移量調用它們中的每一個。

便宜,你可以做這樣的事情...

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爲每個結果同時啓動一個定時器。

+0

這似乎是非常好的,但我得到的錯誤'未捕獲TypeError:無法調用方法'點擊'未定義'。在標籤我有這個「[ ​1​​2​​3​ ]」 – user746916 2011-05-10 14:05:57

+0

當您通過索引來訪問一個jQuery對象的元素,像'選項卡[項目]',你回來底層DOM元素,而不是一個jQuery包裝的DOM元素。你必須做'$(tabs [item])。click()'。 – 2011-05-10 14:37:42

+0

你知道這可以無限循環嗎?像再次從第一個標籤重複它...無盡的循環? – user746916 2011-05-10 14:42:54