我正在尝试使用 UnderscoreJS 和它的 _.debounce()
方法来停止在 keyup 事件上重复触发的回调函数。我这样做是因为每次您开始输入时,都会启动 AJAX 调用,因此为您输入的每个字符进行调用会非常昂贵(:
这就是我使用方法的方式:
onTypeEvents : function(selector, callback) {
return $(selector).on('keyup', function(event){
var that = $(this).val().trim();
switch(event.keyCode) {
case 8:
if(that !== '') {
if(that.length >= 2) {
return _.debounce(function() { callback.apply(that, [ that ]) }, 150);
} else {
return _.debounce(function() { callback.apply(null, [ null ]) }, 150);
};
};
break;
case 9:
break;
case 13:
break;
case 27:
break;
case 37:
break;
case 38:
break;
case 39:
break;
case 40:
break;
default:
if(that !== '') {
if(that.length >= 2) {
return _.debounce(function() { callback.apply(that, [ that ]) }, 150);
} else {
return _.debounce(function() { callback.apply(null, [ null ]) }, 150);
};
};
break;
};
event.preventDefault();
event.stopPropagation();
});
},
但显然它不起作用,因为不再启动任何东西,但如果我删除该方法,我的代码就可以正常工作(:那么那里可能出了什么问题?我做错了吗还是我遗漏了什么?
最佳答案
这个想法是去抖动 keyup 回调本身。这样你的代码只会对你的用户在停止输入之前输入的最后一个键使用react。像这样的东西:
$(selector).on('keyup', _.debounce(function (e) {
switch (e.keyCode) {
/* your code */
}
}, 500));
关于javascript - 使用 Underscore 的 _.debounce() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13158708/