2014-12-02 44 views
1

在我的應用程序中,我想根據地址更新谷歌地圖地圖並放置用戶類型。 因爲我不想讓應用程序每次更改地圖時輸入1個字母,我搜索了一些東西以降低關閉的函數調用。由於超時只會拖延調用的函數(該函數將被調用相同的時間,如果它沒有延遲),我尋找替代品和發現jQUery debounce,我tryed實現它想:用戶停止打字後運行功能

$('input.locatie-input').on('input', $.debounce(function() { 
     console.log('changed'); 
     initializeMap(); 
    }, 500)); 

但我不斷收到以下錯誤:

Uncaught TypeError: undefined is not a function 

reffering以下行:

$('input.locatie-input').on('input', $.debounce(function() { 

難道我做錯了什麼,而且是反跳的方式在這種情況下?

UPDATE:

ROKO C. Buljan的答案是工作,去抖動插件做同樣的

防抖插件代碼:

_.debounce = function(func, wait, immediate) { 
var timeout; 
return function() { 
    var context = this, args = arguments; 
    var later = function() { 
     timeout = null; 
     if (!immediate) func.apply(context, args); 
    }; 
    var callNow = immediate && !timeout; 
    clearTimeout(timeout); 
    timeout = setTimeout(later, wait); 
    if (callNow) func.apply(context, args); 
}; 
}; 
+0

您是否在您的頁面上加入了debounce javascript? – 2014-12-02 22:11:36

+0

您不需要任何* debounce *插件來完成該任務。 – 2014-12-02 22:20:03

+1

@RokoC.Buljan,但OP的代碼不工作的原因是因爲他錯過了插件代碼? – 2014-12-02 22:22:51

回答

4

看到這個:jsBin demo

var timeo;           // Define timeout var. 
$('input.locatie-input').on('input', function(){ // As one types 
    clearTimeout(timeo);       // clear a running timeout 
    timeo = setTimeout(initializeMap, 500);  // and set a new one 
}); 
+0

這隻會設置一個延遲,所以它運行initializemap函數的時間等於相同的代碼沒有延遲的權利?我想要做的就是限制對這個函數的調用,EDIT mm這個jsbin顯示它沒有,爲什麼不呢? – 2014-12-02 22:11:39

+0

@SvenB將只有一個函數調用,你可以在Demo鏈接中看到,並且在一次停止輸入後,只有一次停止,在500ms之後。如果一個人再次開始打字,很好,同樣的事情會一遍又一遍地發生。 – 2014-12-02 22:12:52

+0

@SvenB因爲你輸入clearTimeout會清除當前正在運行的超時設置。 – 2014-12-02 22:13:26