2012-07-19 70 views
1

我有一個自動完成,但是當我輸入文本搜索並將鼠標移動到自動完成的結果上時,自動完成中的文本更改爲上一個(刪除)。有誰知道如何改善這種行爲。jquery autocomplete取消焦點事件

我jQuery.com

重點類型閱讀:autocompletefocus

焦點前移到項目(不選擇),ui.item指 關注項目。焦點的默認操作是將焦點項目的值替換爲文本 字段的值,但前提是焦點事件是由鍵盤交互觸發的。取消此 事件可防止更新值,但不會阻止 菜單項被集中。

但我不知道如何取消焦點事件。

回答

1

你說得對,jquery autocpmplete在他們自己的[demo page] [1]上有這個bug。
如果您鍵入了一些文本並且自動填充顯示了一些答案,您可以獲取它;然後你添加一些額外的文本,同時你徘徊在答案之一,程序會削減你的額外文本。
可以在自動完成構件

blur: function (event, ui) { 
      // don't set the value of the text field if it's already correct 
      // this prevents moving the cursor unnecessarily 
      if (self.menu.element.is(":visible") && (self.element.val() !== self.term)){ 
       self.element.val(self.term); 
      } 
     } 

查看源代碼,你可以通過註釋掉此行self.element.val(self.term); 弄清楚你的問題,但這個是不是真的好主意。你可以發佈bug到jquery!

1

默認情況下,jquery-ui的自動完成小部件不會替換鼠標懸停時的輸入文本。但是,如果您複製在http://jqueryui.com/demos/autocomplete/#custom-data發現的以下代碼:

1 $("#project").autocomplete({ 
2  minLength: 0, 
3  source: projects, 
4  focus: function(event, ui) { 
5  $("#project").val(ui.item.label); 
6  return false; 
7  }, 

這正是您所得到的。如果您不想要這種行爲,只需從第4-7行刪除焦點選項即可。

+0

一點也沒有」 t取代,它會刪除新輸入的文本(如果您輸入的速度足夠快而沒有暫停)。我沒有焦點選項,但我必須添加以防止焦點事件。這個bug可以在這裏演示http://jqueryui.com/demos/autocomplete/ – Rinat 2012-07-20 03:54:49

1

正如你在你的問題中所述,關於jQuery Autocomplete的focus event可以被取消。焦點是一個函數,其中第一個參數是jQuery Event對象。按照事件文檔:

事件

... 它歸一化目標,relatedTarget,其中,metaKey和pageX屬性/ Y性質和同時提供stopPropagation()和preventDefault()方法的方法。

然後,您可以使用preventDefault()方法像這樣:

$(".selector").autocomplete({ 
    focus: function(event, ui) { 
    event.preventDefault(); 
    } 
}); 
0

這將值設置爲輸入,刪除焦點

$("#to").autocomplete({ 
    source: availableTags, 
    select: function (event, ui) { 
    $("#to").val(ui.item.label); 
     $('#to').blur(); 
     return false ; 
    } 
});