jQuery元素以某种方式缓存在setInterval中

时间:2015-04-21 08:45:15

标签: javascript jquery

我试图每隔x秒触发一次元素点击。每次都不是完全相同的元素(取决于用户选择了哪个选项卡,它应该单击该选项卡),但它们都在同一个容器中(标识为#container。所选元素具有类{{ 1}}并在用户点击它时获取该类。

这是我的代码:

.selected

问题是,在超时之间,如果用户点击另一个标签,则此部分不会选择:var feedContainer = $('#container'); window.setInterval(function () { var selectedTab = feedContainer.find('.selected'); selectedTab.trigger('click'); }, 10000); 。它只是获得之前选择的那个,而不是具有该类的新的。我该如何避免?

如果我每次在计时器中进行整个选择(var selectedTab = feedContainer.find('.selected');),它都可以正常工作。它似乎以某种方式缓存了上次运行的结果。

为什么会这样,我如何强制它获取正确的元素?

5 个答案:

答案 0 :(得分:4)

您已经通过以下方式自行缓存元素:

var feedContainer = $('#container');

如果在将内容分配给变量后内容发生变化,那么该变量将无法自动更新新内容。


只要您想对其进行操作,就可以直接使用它$('#container');

答案 1 :(得分:0)

您正在做的是,在开始时,您会收集一些与所选内容相匹配的元素(使用$('#container')),但稍后您会更改未反映的#container内容在feedContainer中的jQuery对象中。只需在每次迭代时获取容器。

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

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

答案 2 :(得分:0)

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

由于建议不改变容器。

答案 3 :(得分:-1)

首先,理想情况下,ID应该用于识别单个"元素,而不是多个元素。改变它可以通过使用"类"传播具有相同名称的元素来帮助你。标识符。改变这可能对你有所帮助。

答案 4 :(得分:-1)

我会这样做的。简而言之,没有变量分配,因此没有缓存。

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