2012-06-01 72 views
0

這裏是我的代碼:jQuery UI的autocomplate選項沒有出現,直到第二搜索

$("#hifind-find").keyup(function(){ 

    var val = $(this).val(); 

    if (val.length > 1) { 
    var posturl = '/hifind/jquery_ui/autocomplete/'+val; 

    $.post(posturl, function(r) { 

     $("#hifind-find").autocomplete({ 
     source: r, 
     delay: 50, 
     minLength: 2 
     }); 

     $("#hifind-find").bind('autocompleteselect', function(){ 
     alert('test'); 
     }); 

    }, "json"); 
    } 

}); 

我鍵入#hifind-發現場的一封信。正如所料,由於val不大於1,所以沒有任何反應。我輸入第二個字符。正如預期的那樣,郵政火災和螢火蟲的反應是我所期望的。但jQuery UI插件不顯示該字段下的匹配項目。如果我退格一次,然後再次輸入第二個字符,則帖子會再次觸發,這次會顯示選項。結果始終顯示在第二個連續時間進行相同的搜索。所以......

  1. BA(沒有給出選項)
  2. Backspace鍵兩次,然後...
  3. BA( 「香蕉」 是作爲一個選項, 「貝比魯斯」 等)。

但是,如果我重新加載,然後......

  1. BA(沒有給出)
  2. AP(沒有給出)
  3. BA(沒有給出)
  4. AP(無,等等,直到我連續做兩次相同的搜索)

我可以在firebug中看到響應回調每次都是一樣的,並且包含正確的數據。

想法?

回答

1

你這樣做是錯的。您應該自動填充搜索字段,而不是綁定到自動填充搜索字段。這樣,自動填充將執行緩存以及不適合您的內容。

看到這個職位:http://jqueryui.com/demos/autocomplete/#remote-with-cache

對於如何更好的使用autocompleter。

在您的例子就應該是這樣的:

 $("#hifind-find").autocomplete({ 
     source: function(request, response) { 
      var posturl = '/hifind/jquery_ui/autocomplete/'+request.term; 
      $.post(posturl, function(data) { 
      response(data); 
      }, "json"); 
     }, 
     delay: 50, 
     minLength: 2 
     }); 

     $("#hifind-find").bind('autocompleteselect', function(){ 
     alert('test'); 
     }); 

我建議你添加緩存到在我掛到後描述。

+0

謝謝。我使用緩存工作:http://pastebin.com/WRGKpEJH – arnoldbird

0

我想這是因爲它首先需要填充,之後它將準備好獲取字符,那麼爲什麼你不試圖填充它,當它第一次得到一個字符,所以然後第二個燒焦它會準備好...

此代碼:

val.length > 1 

應該是:

val.length > 0 

另外,我不認爲這是一個好主意,呼籲每一個崗位按鍵,它應該得到帖子第一次,所以它可以填充自動完成的對象,並在那之後,它應該使用該對象...

1

您正在將組件轉換爲自動完成後,只有第二次鍵入。

這沒有任何意義 - 爲什麼不按照他們的演示?它比你做得更容易。

1

您的問題是,keyup事件不會等待AJAX​​返回並執行回調函數。在自動完成源包含任何數據之前,關鍵事件完成。當你再次這樣做時,源代碼已經從之前的AJAX調用中填充,因此它可以工作(有點)。

+0

我相信你,戴夫和馬特用不同的方式說同樣的話。你們都對了。 Thx回答! – arnoldbird

相關問題