【发布时间】:2014-05-06 11:41:16
【问题描述】:
我有一个可以切换某些行为的复选框,但是如果有人连续点击 100 次,我不想向我的服务器端发送 100 个请求。
这是我到目前为止所得到的(找到这个代码 sn-p):
deBouncer = function($,cf,of, interval){
var debounce = function (func, threshold, execAsap) {
var timeout;
return function debounced () {
var obj = this, args = arguments;
function delayed () {
if (!execAsap)
func.apply(obj, args);
timeout = null;
}
if (timeout)
clearTimeout(timeout);
else if (execAsap)
func.apply(obj, args);
timeout = setTimeout(delayed, threshold || interval);
}
}
jQuery.fn[cf] = function(fn){ return fn ? this.bind(of, debounce(fn)) : this.trigger(cf); };
};
在我的文档准备功能中:
deBouncer(jQuery,'smartoggle', 'click', 1500);
然后是事件本身:
$(window).smartoggle(function(e){
MyToggleFunction();
});
这是因为我将 1500 毫秒作为去抖动周期,因此如果您在 1500 毫秒内单击 n 次,它只会将最新状态发送到服务器。
但是使用这个有副作用,现在我的其他东西的点击事件搞砸了。我在这里做错了吗?有没有更好的去抖动方法?
【问题讨论】:
-
您肯定在此处的写入轨道上。不过,我只会将此事件绑定到有问题的复选标记。这可能会让你简化一些其他的编码。
-
@JeremyJStarcher 你能举例说明你的意思吗?
-
我需要看看你的标记......或者我可以根据我的做法给你一个虚构的例子。
标签: javascript jquery ajax