我正在选择页面上的所有按钮。使用下面的代码。
$("button[data-capture=button123]").click(function(){
...some code on click
});
我最终点击了所有的按钮一次,因为我希望一次单击一个,使用点击之间的延迟。
我正在选择页面上的所有按钮。使用下面的代码。
$("button[data-capture=button123]").click(function(){
...some code on click
});
我最终点击了所有的按钮一次,因为我希望一次单击一个,使用点击之间的延迟。
你应该遍历各种按钮并点击它们一个接一个。要做到这一点,你需要使用一个封闭记住循环内的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);
}
对于所有回调('buttons.length'),'i'将会相同,因为每个回调都使用相同的值,并且因为在点击按钮时评估'delay * i'。 – 2014-09-28 18:42:53
@ t.niese谢谢,我编辑了我的回答 – 2014-09-28 19:16:05
@MarcoBonelli当我输入上面的代码时,我得到'undefined'。什么是'我'? – CP3O 2014-09-29 00:30:11
您可以使用setTimeout
:
var buttonset = $('button[data-capture="button123"]');
buttonset.click(function(){
setTimeout((function(){
// code to implement
},
100//timeinterval in miliseconds can use variable also.
);
}
为什么不使用'buttonset.click'而没有'for ... in'循环?由于在按钮被点击时调用回调,所以应该没有任何区别。你不应该使用'for ... in'迭代一个jQuery结果集,因为它也会遍历所有其他属性,比如'length','wrap' ......。 – 2014-09-28 18:39:47
@ t.niese有问题,他提到了延迟,所以我认为这将是好的。 – 2014-09-28 18:43:50
我不知道OP真正感兴趣的是什么,我的评论只是关于你答案的糟糕风格。你现在的一个没有错误地使用'for ... in',它和你原来的完全一样。 – 2014-09-28 18:50:59
我asume你有多个按钮重复数据捕获
var delay = 100;
$("button[data-capture=button123]").each(function(i){
$(this).click(function(){
var timeout = setTimeout(function(){
/* your code goes here*/
}), delay * i);
});
});
$("button[data-capture=button123]").click(function(){
$("button[data-capture=button123]").each(function(){
// apply delay() here or some setTimeout logic
});
});
你怎么点击所有的人都在一次? – Scimonster 2014-09-28 18:20:15
搜索'js debounce' – 2014-09-28 20:36:51