【问题标题】:How to Click all buttons on a page simultaneously one after one? [duplicate]如何一个接一个地同时单击页面上的所有按钮? [复制]
【发布时间】:2018-08-15 03:04:25
【问题描述】:

我有这段代码可以单击所有按钮一次..我想要的是在每个按钮被单击后有一个小的延迟 1 秒..所以不是真的一次,而是一个接一个地同时......直到所有按钮被点击了!

代码如下:

var inputs = document.getElementsByClassName('xxxxxxxx'); 

for (var i=0; i<inputs.length;i++) 
{ 
    inputs[i].click(); 
}

【问题讨论】:

  • simultaneously one after the other - 依次是您要查找的单词

标签: javascript


【解决方案1】:

使用 setTimeout()

在代码的第三行添加设置超时,如下所示,以每秒单击一次。另外,使用let 而不是var 使其工作:

var inputs = document.getElementsByClassName('xxxxxxxx'); 

for (let i=0; i<inputs.length;i++) // Use let not var to declare i
{ 
    setTimeout(inputs[i].click, i*1000);  // <<<<<< Here
}

【讨论】:

    【解决方案2】:

    假设 ES6 是允许的,你可以用 map 一行:

    const inputs = document.getElementsByClassName('xxx');
    const clickButton = (btn) => btn.value = 'Clicked'
    
    Array.from(inputs).map((x, i) => setTimeout(() => clickButton(x), i * 2000))
    <input type="submit" class="xxx" onclick="log()" />
    <input type="submit" class="xxx" onclick="log()" />
    <input type="submit" class="xxx" onclick="log()" />

    【讨论】:

      【解决方案3】:

      您可以使用递归而不是 for 循环,并在函数中包含超时。示例:

      const inputs = document.getElementsByClassName('button'); 
      
      const logClicked = () => console.log('clicked')
      
      const checkTheBox = (arr,pos) => {
        if (pos < arr.length) {
          arr[pos].click()
          arr[pos].style.background = 'red'
          setTimeout(() => checkTheBox(arr, pos+1), 1000)
        }
        return
      }
      
      checkTheBox(inputs, 0)
      .button {
        border:1px solid black;
        background: white;
      }
      <div class="wrapper">
        <input type="submit" class="button" onclick="logClicked()" />
        <input type="submit" class="button" onclick="logClicked()"/>
        <input type="submit" class="button" onclick="logClicked()"/>
        <input type="submit" class="button" onclick="logClicked()"/>
        <input type="submit" class="button" onclick="logClicked()"/>
        <input type="submit" class="button" onclick="logClicked()"/>
        <input type="submit" class="button" onclick="logClicked()"/>
      </div>

      【讨论】:

      • 嗨,谢谢.. 伙计,它不起作用,它只是同时单击所有按钮。顺便说一句,如果有什么不同,我会在开发工具的控制台上运行代码。它也是一个按钮而不是一个复选框..
      • 可能是浏览器问题。当您单击我的答案下的“运行代码 sn-p”时,这对您不起作用?
      • 嗨,弗兰,你的例子效果很好。我要点击的是一个按钮,而不是一个复选框,请问您可以相应地更改代码吗?
      • 确定, 还是
      猜你喜欢
      • 1970-01-01
      • 2019-09-22
      • 2022-12-20
      • 2021-01-22
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多