【问题标题】:Using Underscore's _.debounce() method使用 Underscore 的 _.debounce() 方法
【发布时间】:2012-10-31 13:08:11
【问题描述】:

我正在尝试使用 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();
        });
    },

但显然它不起作用,因为不再启动,但是如果我删除该方法,我的代码就可以正常工作(:那么那里可能出了什么问题?我做错了还是我错过了什么?

【问题讨论】:

    标签: javascript underscore.js


    【解决方案1】:

    这个想法是消除 keyup 回调本身的抖动。这样,您的代码只会对用户在停止输入之前输入的最后一个键做出反应。比如:

    $(selector).on('keyup', _.debounce(function (e) {
      switch (e.keyCode) {
        /* your code */
      }
    }, 500));
    

    【讨论】:

    • 如果您只想消除特定键码的抖动怎么办? switch 语句中的 debounce 调用(如 _.debounce(myFunction, 100); )似乎不起作用,myFunction 永远不会被调用
    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 2017-05-05
    • 2018-11-02
    • 2018-06-02
    • 2021-11-06
    • 2011-05-16
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多