2015-04-21 26 views
1

我試圖每隔x秒觸發一次元素單擊。每次都不是完全相同的元素(取決於用戶選擇了哪個選項卡,它應該單擊該選項卡),但它們全都在同一個容器中(編號爲#container。所選元素的類別爲.selected,並在獲得該類時它已被點擊用戶jQuery元素以某種方式緩存在setInterval中

這是我的代碼:

var feedContainer = $('#container'); 
window.setInterval(function() { 
    var selectedTab = feedContainer.find('.selected'); 
    selectedTab.trigger('click'); 
}, 10000); 

的問題是超時之間,如果另一個選項卡上的用戶點擊,這部分不撿那就是:var selectedTab = feedContainer.find('.selected');它只是得到了之前選擇的那個,而不是那個有這個類的新的那個,我怎樣才能避免這種情況?

如果我每次都在計時器中完成整個選擇(var selectedTab = $('#container .selected');),它會正常工作。它似乎以某種方式緩存了上次運行的結果。

這是爲什麼,我該如何強制它獲取正確的元素?

+1

什麼是使用_var selectedTab = $( '#.selected容器')_代替_var selectedTab = feedContainer.find的問題( '選擇'); _? – Sidd

+0

@準確地思索我的想法! – jPO

+0

我不必返回DOM來多次獲取容器 - >性能提升。 – stinaq

回答

4

您已經做這個自己緩存元素:

var feedContainer = $('#container'); 

如果內容改變你把它分配給變量,然後該變量將不會與自動將新的內容更新之後。


直接使用它就像這個$('#container');直接每當你想對其進行操作。

+1

正如問題所述,我知道它的工作原理是這樣做的,我只是想利用這個兌現元素,而不必回到DOM來獲得相同的,包裝元素多次。我認爲我所得到的只是對該DOM元素的引用,並且在DOM爲 – stinaq

+0

時引用(和內容)被更新了,您很難學會它不是 - 您將DOM節點存儲在變量 –

0

你在做什麼,在開始的時候,你收集匹配(使用$('#container'))的選擇,但後來,您更改未反映在feedContainer jQuery對象的#container的內容,一些元素。只需在每次迭代中獲取容器。

window.setInterval(function() { 
    var feedContainer = $('#container'); 

    var selectedTab = feedContainer.find('.selected'); 
    selectedTab.trigger('click'); 
}, 10000); 
-1

首先,理想情況下應該使用ID來標識「單個」元素,而不是多個元素。通過使用「class」標識符來改變名稱,可以通過傳播具有相同名稱的元素來幫助您。改變這可能會幫助你很多。

0
window.setInterval(function() { 
    var selectedTab = $('#container').find('.selected'); 
    selectedTab.trigger('click'); 
}, 10000); 

由於容器沒有改變以上提出。

-1

我會這樣做。簡而言之,並且沒有變量分配,因此沒有緩存。

window.setInterval(function() { 
    $('#container .selected').trigger('click'); 
}, 10000); 
+0

爲什麼我減去?請給出意見。有什麼不對的嗎?? – jPO

+0

這是多餘的答案 –

+0

我不這麼認爲。解釋了緩存問題。解釋了正確的元素。甚至還有一個問題:「我該如何避免這種情況?」被回答... – jPO