2014-09-28 18 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 
     }); 
    });