2011-05-31 103 views
8

在選項「源」中,我用ajax獲得結果+ 1個自定義註釋文本,其中包含有關可能結果的信息。如:「顯示3456個結果中的2個」。它只是用戶的一個信息。jQuery自動完成不選擇項目

對於-ul-列表中的最後一項,我不會處理以下事件:keyup,keydown,pageup和pagedown。

對於這一點,我有選擇「打開」設置此:

open: function(event, ui) { 
$("ul.ui-autocomplete.ui-menu li:last").removeClass("ui-menu-item").removeAttr("role").html('Show 2 of 3456 results'); 
}, 

HTML現在這個樣子:

 
<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox" aria-activedescendant="ui-active-menuitem" style="z-index: 1; top: 39px; left: 79px; display: block; width: 273px;"> 
<li class="ui-menu-item" role="menuitem"> 
    <a class="ui-corner-all" tabindex="-1">Result 1</a> 
</li> 
<li class="ui-menu-item" role="menuitem"> 
    <a class="ui-corner-all" tabindex="-1">Result 2</a> 
</li> 
<li class="">Show 2 of 3456 results</li> 
</ul> 

這工作,如果它至少給最小的一個真實的結果,而不是隻有最後一個註釋文本。

但是如果沒有結果可用並且只有註釋文本(最後一項)「沒有結果」,那麼我會在事件中看到一條錯誤消息:keyup,keydown,pageup和pagedown。

錯誤在Firebug:item.offset()爲null

 
<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox" aria-activedescendant="ui-active-menuitem" style="z-index: 1; top: 39px; left: 79px; display: block; width: 273px;"> 
<li class="">No Results</li> 
</ul> 

我能做些什麼來添加自定義-li-結束名單,這是不可選?

jQuery的UI 1.8.13

回答

2

我發現,如果你li元素不包含a標籤這個widget會抱怨。我意識到這使得它是可選的,所以你要麼爲你的案例擴展類,要麼創建一個CSS規則,以確保li沒有得到選定的狀態(這是有點破解,我承認)

+3

如果黑客行得通,那麼我傾向於稱他們爲'無證編碼的巧妙點':) – 2011-08-03 13:19:00

+0

只要你的自定義'li'沒有'.ui-menu-item'類,它就不應該觸發點擊時自動完成選擇事件。 – nickb 2011-12-19 23:28:33

1

與其混淆CSS選擇器,爲什麼不綁定到selectchange事件來檢查要添加到對象的自定義數據(可通過參數ui.item獲得這些事件)?你想最終是這樣的:

$(function() { 
    $("#acInput").autocomplete({ 
            source: availableTags, 
            select: function(event, ui) { 
             // if it's your info item, then 
             event.preventDefault(); 
            }, 
            change: function(event, ui) { 
             // if it's your info item, then 
             event.preventDefault(); 
            } 
           }); 
}); 

注意,preventDefault()只是停止該事件。在某些情況下(使用鍵盤導航列表時),它將使用項目的值填充輸入。如果您確定所選項目或將要更改的值實際上是您的數據項目,您希望您的測試重置文本框的值。