我试图每隔x秒触发一次元素点击。每次都不是完全相同的元素(取决于用户选择了哪个选项卡,它应该单击该选项卡),但它们都在同一个容器中(标识为#container
。所选元素具有类{{ 1}}并在用户点击它时获取该类。
这是我的代码:
.selected
问题是,在超时之间,如果用户点击另一个标签,则此部分不会选择:var feedContainer = $('#container');
window.setInterval(function () {
var selectedTab = feedContainer.find('.selected');
selectedTab.trigger('click');
}, 10000);
。它只是获得之前选择的那个,而不是具有该类的新的。我该如何避免?
如果我每次在计时器中进行整个选择(var selectedTab = feedContainer.find('.selected');
),它都可以正常工作。它似乎以某种方式缓存了上次运行的结果。
为什么会这样,我如何强制它获取正确的元素?
答案 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);