我正在選擇頁面上的所有按鈕。使用下面的代碼。
$("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