我有一個ComboBox,數據提供者是一個包含3個值的ArrayCollection:CA - 加利福尼亞州,紐約州 - 紐約州,德克薩斯州 - 德克薩斯州。使用默認行爲當我開始在ComboBox中輸入時,它會嘗試匹配字符串開始處的值,所以如果我開始輸入TX,它將調出TX - Texas。基於用戶輸入過濾數據提供者的自定義Flex組合框
我希望能夠在字符串的任何部分進行搜索,而不僅僅是從頭開始,所以如果我輸入「xas」,它會過濾出所選內容並僅顯示TX - Texas。在Adobe論壇here中有一個非常有用的帖子,通過更改ArrayCollection上的過濾器函數來爲ComboBox提供數據,並且我已經調整了它,但是我遇到了一些小問題。
如果用戶選擇一個值然後嘗試輸入新文本,則ComboBox中鍵入的第一個字母不會顯示。
1)選擇價值CA - 在ComboBox
2加利福尼亞州)突出顯示文本,然後按「N」鍵盤上
3)您希望看到的文本框中填入「N」,但文本框遺蹟空
什麼可能導致此問題?只有當你已經選擇了一個值時纔會發生。如果您從空白組合框開始,則按預期工作。
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
import spark.events.TextOperationEvent;
[Bindable]
public var arrC:ArrayCollection = new ArrayCollection([{label:'CA - California'},{label:'NY - New York'},{label:'TX - Texas'}]);
private function changeHandler(e:*):void
{
if (arrC.filterFunction != doFilter)
arrC.filterFunction = doFilter;
arrC.refresh();
}
private function doFilter(item:Object):Boolean
{
if(String(item.label).toLowerCase().indexOf(cb.textInput.text.slice(0 ,cb.textInput.selectionAnchorPosition).toLowerCase())>-1)
{
return true;
}
return false;
}
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
cb.textInput.addEventListener(TextOperationEvent.CHANGE,changeHandler);
}
]]>
</fx:Script>
<s:ComboBox id="cb" dataProvider="{arrC}"/>
你有沒有考慮一個'AutoComplete'組件,而不是一個'ComboBox'? http://flashcommander.org/blog/flex-4-autocomplete – 2011-05-20 18:59:52
我知道這是一箇舊的,但我們的AutoCompleteComboBox帶來了兩全其美;一個AutoComplete組件和一個ComboBox。 https://www.flextras.com/index.cfm?event=ProductHome&productID=19 – JeffryHouser 2011-07-12 02:58:26
它適用於給定的代碼,因爲它是給定的步驟(1,2,3)。任何特定的方式來重現它? – 2011-07-19 16:14:20