2014-09-28 61 views
0

我正在选择页面上的所有按钮。使用下面的代码。

$("button[data-capture=button123]").click(function(){ 
    ...some code on click 
}); 

我最终点击了所有的按钮一次,因为我希望一次单击一个,使用点击之间的延迟。

+1

你怎么点击所有的人都在一次? – Scimonster 2014-09-28 18:20:15

+0

搜索'js debounce' – 2014-09-28 20:36:51

回答

3

你应该遍历各种按钮并点击它们一个接一个。要做到这一点,你需要使用一个封闭记住循环内的i值,就像这样:

var buttons = $('button[data-capture="button123"]'), 
    delay = 500; // milliseconds 

for (var i=0; i < buttons.length; i++) { 
    (function(I) { 
     buttons.eq(I).click(function(){ 
      setTimeout(function() { 
       // some code 
      }, delay * I);    
     }); 
    })(i); 
} 
+0

对于所有回调('buttons.length'),'i'将会相同,因为每个回调都使用相同的值,并且因为在点击按钮时评估'delay * i'。 – 2014-09-28 18:42:53

+0

@ t.niese谢谢,我编辑了我的回答 – 2014-09-28 19:16:05

+0

@MarcoBonelli当我输入上面的代码时,我得到'undefined'。什么是'我'? – CP3O 2014-09-29 00:30:11

0

您可以使用setTimeout

var buttonset = $('button[data-capture="button123"]'); 
buttonset.click(function(){ 
    setTimeout((function(){ 
    // code to implement 
    }, 
    100//timeinterval in miliseconds can use variable also. 
    ); 

} 
+1

为什么不使用'buttonset.click'而没有'for ... in'循环?由于在按钮被点击时调用回调,所以应该没有任何区别。你不应该使用'for ... in'迭代一个jQuery结果集,因为它也会遍历所有其他属性,比如'length','wrap' ......。 – 2014-09-28 18:39:47

+0

@ t.niese有问题,他提到了延迟,所以我认为这将是好的。 – 2014-09-28 18:43:50

+0

我不知道OP真正感兴趣的是什么,我的评论只是关于你答案的糟糕风格。你现在的一个没有错误地使用'for ... in',它和你原来的完全一样。 – 2014-09-28 18:50:59

2

我asume你有多个按钮重复数据捕获

var delay = 100; 

    $("button[data-capture=button123]").each(function(i){ 
     $(this).click(function(){ 
      var timeout = setTimeout(function(){ 
      /* your code goes here*/ 
      }), delay * i); 
     }); 
    }); 
0
$("button[data-capture=button123]").click(function(){ 
     $("button[data-capture=button123]").each(function(){ 
       // apply delay() here or some setTimeout logic 
     }); 
    });