簡體   English   中英

For 循環中的 Click() 僅適用於第一個按鈕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM