ada*_*101 5 javascript debouncing
如何消除可以从多个事件中启动的动作?这是一个示例,仅用于演示行为:http : //jsfiddle.net/eXart/2/
<input type="text" id="t">
<div id="x"></div>
<script>
function debounce(fn, delay) {
var timer = null;
return function () {
var context = this, args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(context, args);
}, delay);
};
}
function doStuff(){
document.getElementById("x").innerHTML +="<br>stuff";
}
var t = document.getElementById("t");
t.onchange = debounce(function(){ doStuff() }, 500);
t.onblur = debounce(function(){ doStuff() }, 500);
</script>
Run Code Online (Sandbox Code Playgroud)
如果您在文本框中输入一些文本并单击退出,您会看到“stuff”出现两次而不是一次,因为每个事件都获得了它自己的去抖动实例。您如何跨事件共享去抖动实例?
您必须附加相同的去抖动处理程序,如下所示
var debouncedFunc = debounce(function(){ doStuff(); }, 500);
t.onchange = debouncedFunc;
t.onblur = debouncedFunc;
Run Code Online (Sandbox Code Playgroud)
如果您想共享计时器。
但我认为,如果您想在输入失去焦点后避免重复调用,您应该只使用onchangeoronblur事件之一。
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |