2013-02-05 69 views
1

我正在使用jQuery UI庫版本1.8.23的自動完成小部件。我的代碼如下所示:延遲jQuery UI自動完成焦點事件

$(this).autocomplete({ 
    autoFocus: true, 
    minLength: 2, 
    delay:  100, 
    source: function(request, response) {AutoCpl.getSource(request, response)}, 
    select: function(e, ui)    {AutoCpl.getSelect(e, ui, $(this))}, 
    open:  function(e, ui)    {AutoCpl.setOpen($(this))} 
}); 

經過100 ms的延遲我正在使用AJAX調用產品列表進行檢索。一切正常,但我有焦點事件的問題。我希望在選擇列表中懸停時顯示產品詳細信息。由於需要計算大量的數據,因此無法立即將產品詳細信息與產品列表一起返回。我需要使用另一個AJAX調用以便稍後在焦點事件中獲取這些信息。因爲有人可以通過鼠標移動將鼠標懸停在所有產品上,所以我無法進行AJAX調用並顯示每個響應。我必須確定有人真的希望看到特定產品的細節,所以我想等一段時間來做這個AJAX調用。

我試圖使用Ben Alman的jQuery debouce插件,但它不會按照我想要的方式工作(或者也許我只是使用它錯誤)。如果我試着這樣說:

focus:  $.debounce(1000, App.getProductsDetails) 

活動是由1秒延遲(這是確定),但在getProductsDetailt我沒有訪問事件和UI對象。 我嘗試另一種方式:

focus:  function(e, ui){$.debounce(1000, App.getProductsDetails)} 

這次getProductsDetails甚至沒有叫,這並沒有讓我吃驚了,因爲據我所知,去抖動功能必須綁定一個事件,即。 $( '#ID')。單擊($。防抖動())。

我的問題是我怎麼能延遲焦點事件,並在同一時間訪問對象返回焦點事件?

回答

1

經過幾個小時的研究和嘗試,我找到了答案。

$ .debounce功能將所有參數傳遞,因此,所有我需要做的是添加參數以我AgetProductsDetails方法:

App = { 
    getProductsDetails: function(e, ui){ 
     console.log(ui); 
    } 
} 

所以這個代碼:

focus:  $.debounce(1000, App.getProductsDetails) 

良好。 Documentation of debounce plug-in給了我一個線索。

我以後犯了錯誤...