我有一個自動完成,但是當我輸入文本搜索並將鼠標移動到自動完成的結果上時,自動完成中的文本更改爲上一個(刪除)。有誰知道如何改善這種行爲。jquery autocomplete取消焦點事件
我jQuery.com
重點類型閱讀:autocompletefocus
焦點前移到項目(不選擇),ui.item指 關注項目。焦點的默認操作是將焦點項目的值替換爲文本 字段的值,但前提是焦點事件是由鍵盤交互觸發的。取消此 事件可防止更新值,但不會阻止 菜單項被集中。
但我不知道如何取消焦點事件。
我有一個自動完成,但是當我輸入文本搜索並將鼠標移動到自動完成的結果上時,自動完成中的文本更改爲上一個(刪除)。有誰知道如何改善這種行爲。jquery autocomplete取消焦點事件
我jQuery.com
重點類型閱讀:autocompletefocus
焦點前移到項目(不選擇),ui.item指 關注項目。焦點的默認操作是將焦點項目的值替換爲文本 字段的值,但前提是焦點事件是由鍵盤交互觸發的。取消此 事件可防止更新值,但不會阻止 菜單項被集中。
但我不知道如何取消焦點事件。
你說得對,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!
取消事件是通過調用event.preventDefault()
(並非所有事件都可以取消,檢查event.cancelable
)完成的。 https://developer.mozilla.org/en/DOM/event.preventDefault
默認情況下,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行刪除焦點選項即可。
一點也沒有」 t取代,它會刪除新輸入的文本(如果您輸入的速度足夠快而沒有暫停)。我沒有焦點選項,但我必須添加以防止焦點事件。這個bug可以在這裏演示http://jqueryui.com/demos/autocomplete/ – Rinat 2012-07-20 03:54:49
正如你在你的問題中所述,關於jQuery Autocomplete的focus event可以被取消。焦點是一個函數,其中第一個參數是jQuery Event對象。按照事件文檔:
事件... 它歸一化目標,relatedTarget,其中,metaKey和pageX屬性/ Y性質和同時提供stopPropagation()和preventDefault()方法的方法。
然後,您可以使用preventDefault()
方法像這樣:
$(".selector").autocomplete({
focus: function(event, ui) {
event.preventDefault();
}
});
這將值設置爲輸入,刪除焦點
$("#to").autocomplete({
source: availableTags,
select: function (event, ui) {
$("#to").val(ui.item.label);
$('#to').blur();
return false ;
}
});
感謝,我會檢查出來 – Rinat 2012-07-20 03:50:46