![](/img/trans.png)
[英]jquery button click works for only the first data in laravel foreach loop
[英]Click() on For Loop only works on the first button
所以我目前正在創建一個測試腳本,其中一個場景是根據 aria-label 單擊不同的按鈕集。
所以一個非常簡單的 JS,我在其中執行查詢選擇器並單擊所有需要的按鈕,但由於某種原因只有第一個按鈕被單擊。
起初我以為這可能是競爭條件,所以我加了一個延遲
我的代碼:
var share = document.querySelectorAll("[aria-label='SubmitDoc']"); for (let i = 0, len = share.length; i < len; i++) { setTimeout(function () { console.log(share[i]); share[i].click(); },2000 * i); }
<div aria-label="SubmitDoc" class="btn-submit" role="button" tabindex="0"></div> <div aria-label="SubmitForm" class="btn-submit" role="button" tabindex="0"></div> <div aria-label="SubmitClass" class="btn-submit" role="button" tabindex="0"></div> <div aria-label="SubmitDoc" class="btn-submit" role="button" tabindex="0"></div> <div aria-label="SubmitForm" class="btn-submit" role="button" tabindex="0"></div> <div aria-label="SubmitClass" class="btn-submit" role="button" tabindex="0"></div> <div aria-label="SubmitFinal" class="btn-submit" role="button" tabindex="0"></div> <div aria-label="SubmitFinal" class="btn-submit" role="button" tabindex="0"></div>
我錯過了什么嗎?
你基本上錯過了一個閉包。 因為您在 setTimeout 中運行點擊,當它觸發時循環已經運行並且 i 的值已經是它的最大值。 你可以這樣解決這個問題:
var submitDoc = document.querySelectorAll("[aria-label='SubmitDoc']")
var doClick = function (node, delay) {
setTimeout(function () {
node.click();
}, delay);
}
for (let i = 0, len = share.length; i < len; i++) {
doClick(share[i], 2000 * i);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.