我正在写一个书签来收集我买的Indiegala套装的信息。我没有赠送整个捆绑,而是一次赠送连体衣和两件衣服,因此拥有个性化的礼品网更容易。
在他们拥有之前所以钥匙在那里我可以用一个简单的选择器收集它,现在他们有一个小图像你必须点击以获得每个蒸汽/ desura游戏的礼物网址。
我想,在一个循环中,点击所有这些礼物图像以获得礼物网址,然后循环并获取这些礼物网址。我写了这个:
var gifts = $('#icon-gift img');
for(var j=0; j < gifts.length-1; j++){
gifts[j].click();
}
循环浏览所有图像并触发点击,以便显示礼品网址。我知道它会遍历每个图像,因为它会记录到控制台,因此我知道它不会卡住,但出于某种原因它只能点击第一个可用的图像。单击图像后(谢天谢地)它会被永久点击,当我刷新它时它只有礼品网址然后如果我再次运行循环它会完成下一个(但是这会破坏在脚本中执行它的目的)。 / p>
我尝试在delay(500)
后添加delay(1500)
甚至click()
,但这似乎没有任何改变。
我的问题是:有谁知道为什么会发生这种情况,是否有任何关于如何解决或解决这个问题的建议?
我认为这与异步性有关。这就像循环的其余部分除了其他点击事件之外还会执行其他所有操作。我试过了: var gifts = $('#icon-gift img');
$.each(gifts, function(i, val){
setTimeout(function(){
val.click();
val.remove();
}, 1000);
});
并且它仍然只执行第一个并删除所有其他图像。如果我手动浏览gifts[0].remove();
,然后gifts[0].click();
它会执行下一个。这正是我认为.each()
或for loop
会做的事情,但似乎它无法执行下一次点击,前一个点击仍在执行或仍然存在。
答案 0 :(得分:5)
无需使用for loop
$('#icon-gift img').click();
足够。它将对所有传递的选择器#icon-gift img
执行单击 - &gt;这些都是#icon-gift
的后代图像。所有这些。
否则您的代码无效,因为使用gifts[j]
您实际上从jQuery选择器的数组中提取了对DOM HTML节点元素的JS引用,因此不再是jQuery Object元素。在jQuery对象中再次包装它可以$(gifts[j])
或使用eq()
选择器gifts.eq(j)
,但我再次不需要,如上所示。