[英]Trigger click event in a loop
我正在编写一个书签,以从我购买的Indiegala捆绑包中收集信息。 我不是一次赠与整个捆绑包,而是一次赠予连体衣和二人一组,因此拥有单独的赠品网址会更容易。
在他们拿到钥匙之前,我就可以用一个简单的选择器将其收集起来,现在他们有了一些图片,您必须单击才能获得每个Steam / Desura游戏的礼物URL。
我想循环单击所有这些礼物图像,以使礼物URL出现,然后循环浏览并获得这些礼物URL。 我这样写:
var gifts = $('#icon-gift img');
for(var j=0; j < gifts.length-1; j++){
gifts[j].click();
}
循环浏览所有图像并触发点击,以便出现礼物网址。 我知道它会遍历每个图像,因为它会记录到控制台,所以我知道它不会卡住,但是由于某种原因,它仅单击了可用的第一个图像。 单击图像后(非常感激),它将被永久单击,并且在刷新时仅包含礼物网址,然后如果我再次运行循环,它将执行下一个图像(但这违背了在脚本中进行操作的目的)。
我尝试在click()
添加一个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
会做的事情,但是似乎无法执行下一次单击,而前一个仍在执行或仍然存在。
无需使用for loop
$('#icon-gift img').click();
够了 。 它将对所有通过选择进行点击#icon-gift img
- >这是所有后代图像#icon-gift
。 他们全部。
否则,您的代码无法正常工作,原因是使用了gifts[j]
,实际上是从jQuery选择器的数组中提取对DOM HTML节点元素的JS引用,因此不再是jQuery Object元素。 将其再次包装在jQuery对象中将可以使用$(gifts[j])
或使用eq()
选择器(如gifts.eq(j)
,但是如上所述,也不需要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.