Javascript 具有去抖动/节流功能的奇怪行为
每次文本框值更改时,我都需要调用一个函数。但是,它初始化了一个AJAX调用,因此我不需要在每次击键时都运行脚本 我编写了以下函数作为概念证明:Javascript 具有去抖动/节流功能的奇怪行为,javascript,jquery,Javascript,Jquery,每次文本框值更改时,我都需要调用一个函数。但是,它初始化了一个AJAX调用,因此我不需要在每次击键时都运行脚本 我编写了以下函数作为概念证明: $(document).ready(function() { var scheduledChange; function triggerLinkChange(value, debounce) { clearTimeout(scheduledChange); scheduledChange = setTime
$(document).ready(function() {
var scheduledChange;
function triggerLinkChange(value, debounce) {
clearTimeout(scheduledChange);
scheduledChange = setTimeout(function(val) {
alert("value: "+val);
}(value), debounce);
}
$('input').keyup(function(){
triggerLinkChange($(this).val(),3000);
});
});
不幸的是,延迟似乎没有正常工作。我不确定到底是什么问题,因为第一次通话似乎有点延迟(可能),但每次按键都会触发
有什么想法吗?似乎太复杂了
$('input').keyup(function(){
var self = this;
clearTimeout( $(this).data('timer') );
$(this).data('timer', setTimeout(function(){
// do ajax, 3 seconds seems like lot here
$.get('url', {value : self.value}, callback);
}, 3000));
});
看起来太复杂了
$('input').keyup(function(){
var self = this;
clearTimeout( $(this).data('timer') );
$(this).data('timer', setTimeout(function(){
// do ajax, 3 seconds seems like lot here
$.get('url', {value : self.value}, callback);
}, 3000));
});
一种更简单的方法是使用这样的变量(伪代码,因为我只是在这里输入):
一种更简单的方法是使用这样的变量(伪代码,因为我只是在这里输入):
您正在立即调用您在超时中声明的函数,而不是将其传递给函数 但是,它实际上可以在不绑定或不向函数传递
值的情况下工作,因为变量无论如何都在作用域中:
scheduledChange = setTimeout(function() {
alert("value: " + value);
}, debounce);
下面是一个示例:您正在立即调用您在超时中声明的函数,而不是将其传递给函数
但是,它实际上可以在不绑定或不向函数传递值的情况下工作,因为变量无论如何都在作用域中:
scheduledChange = setTimeout(function() {
alert("value: " + value);
}, debounce);
下面是一个示例:看看,它应该可以解决您的问题。setTimeout
中的第一个参数未定义,因为该函数将在函数表达式导致立即执行该函数后返回未定义的。(值)。看看,它应该可以解决您的问题。setTimeout
中的第一个参数是未定义的,因为在函数表达式导致函数立即执行后,该函数将返回未定义的。(值)。没有骰子。。。这将发送去盎司周期开始时的值。因此,如果我键入Hello并花5秒钟,triggerLinkChange函数会收到“Hel”,因为“l”和“o”的键被阻止。哦,我明白了,你想像自动完成一样完成吗?我会更新我的答案。没有骰子。。。这将发送去盎司周期开始时的值。因此,如果我键入Hello并花5秒钟,triggerLinkChange函数会收到“Hel”,因为“l”和“o”的键被阻止。哦,我明白了,你想像自动完成一样完成吗?我会更新我的答案。@gregschope没问题@格雷斯切普,没问题!感谢您的增强,为我节省了一个全局变量。我喜欢这个解决方案,但不幸的是,我仍然需要打开一个函数,因为这是一个UFD组合框,我需要在一些不同的情况下触发更改。感谢为我节省了一个全局变量的增强。我喜欢这个解决方案,但不幸的是,我仍然需要打开一个函数,因为这是一个UFD组合框,我需要在一些不同的情况下触发更改。