onclick次のようなデバウンス関数でコールバックをラップしたい
http://underscorejs.org/#debounce
これを持っていると言う
function search() {
// ...
}
$jquery(".myFilterCheckboxes").click(search);
上記を次のように変更できるはずです。
// Only allow one click event / search every 500ms:
$jquery(".myFilterCheckboxes").click(_.debounce(search, 500));
デバウンス関数はたくさんありますが、underscore.js を含めることができない場合、または含めたくない場合は、独自の関数を作成することは大したことではありません。
短期間に複数のイベントを作成する複数のクリックについて言及したため、最初に考えたのはデバウンスです。デバウンスは、先行入力検索やオートコンプリートなどでよく使用され、キーを押す間に思考時間を確保するためのわずかなスペースを提供します。
他の人が言及しているように、検索の実行中にチェックボックス/クリックイベントを無効にする方が理にかなっている場合があります。その場合は、次のようにしてみてください。
function disableClick(elem) {
elem.unbind("click");
elem.attr("disabled", true);
}
function enableClick(elem, onclick) {
// Enable click events again
elem.live("click", search);
// Enable the checkboxes
elem.removeAttr("disabled");
}
function search() {
var boxes = $jquery(".myFilterCheckboxes");
disableClick(boxes);
$.get(...).always(function() {
enableClick(boxes, search);
});
}
$jquery(".myFilterCheckboxes").live("click", search);
なぜクリック イベントを無効にし、グローバル ロック変数の代わりに無効属性をチェックボックスに追加するのですか? グローバル ロックは多少エラーが発生しやすい可能性がありますが、それ以上に、DOM で重要なグローバル オブジェクトが既に存在します。DOM の状態を変更するだけで、正しい動作が得られ、検索が完了するまでチェックボックスをオンにする必要があることをユーザーに知らせることができます。
とは言っても、読み込み中のスピナーまたは作業中の何かを使用してユーザーに示すことは、あらゆる種類のロック/バインド解除のシナリオでおそらく理にかなっています。