您想将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 状态,我们会得到正确的行为并向我们的用户发出信号,他们应该在复选框上放松一下,直到搜索完成。
也就是说,对于任何类型的锁定/解除绑定场景,通过加载微调器或您正在做的事情向用户指示可能都是有意义的。