簡體   English   中英

使用Underscore的_.debounce()方法

[英]Using Underscore's _.debounce() method

我正在嘗試使用_.debounce()和它的_.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回調本身。 這樣,您的代碼只會對用戶在停止輸入之前鍵入的最后一個鍵做出反應。 就像是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM