javascript - 使用 Underscore 的 _.debounce() 方法

标签 javascript underscore.js

我正在尝试使用 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/

相关文章:

javascript - Firebase 未经身份验证 - 引发错误 : permission_denied

javascript - 更改传递给函数的数组

javascript - 在 Backbone.js 应用程序中使用 lodash 而不是下划线

javascript - 从主干集合中获取每个模型

javascript - 如何通过 Angular 服务器路由发送Ajax参数?

php - 在从 IIS 托管站点连接的 NodeJS 上对用户进行身份验证

javascript - 在 Chrome 中加载文件时,FileReader readyState 停留在 1

javascript - 主干分页一次 10 个

javascript - 使用 underscore.js 在深度嵌套的 JSON 中查找值

javascript - 调用 JSON.parse 时如何处理转义的 unicode 字符?