按给定间隔单击页面上的所有按钮

时间:2018-07-20 08:38:02

标签: jquery

我有此页面,显示一次按钮列表,至少一次显示一百个,我想要一些jQuery代码以5到3秒的间隔一次单击所有这些按钮,以下是查询I写道,但它只单击了3到4个按钮,然后中断了

$(document).ready(function(e) {
    $(".generate_all").click(function(e){
        var generateButtons = $('.generate');
        var numberOfButtons = generateButtons.length;

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

2 个答案:

答案 0 :(得分:2)

要完成这项工作,您可以遍历按钮,并在每个按钮上附加一个超时,以触发自己的click事件处理程序。您可以通过将延迟乘以元素的索引来抵消这些超时,如下所示:

$('button').click(function() {
  console.log($(this).index());
}).each(function(i) {
  (function(el, index) {
    setTimeout(function() {
      $(el).click();
    }, 3000 * (index + 1));
  })(this, i);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <button>0</button>
  <button>1</button>
  <button>2</button>
  <button>3</button>
  <button>4</button>
</div>

请注意each()处理程序中的IIFE表达式。这是维持延迟最终执行时要单击的button范围的必需条件。

还请注意,这使用了3秒的间隔(3000值),但是如果需要,可以很容易地将其更改为5秒,因为对此您的问题尚不清楚。

答案 1 :(得分:0)

替换您的代码,

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

写那个循环,有些超时,像:

generateButtons.each(function(i) {
  (function(item, index) {
    setTimeout(function() {
      $(item).click();
    }, 3000 * (index + 1));
  })(this, i);