|
|
|||||
Регистрация: Dec 2014
Сообщений: 3
|
Комбобокс с вводом значения вручную
Добрый день. Помогите, пожалуйста, настроить комбобокс так, чтобы можно выбирать элементы не только из выпадающего списка, но и начинать набор с клавиатуры, а из выпадающего списка оставались бы только те строки, которые имеют такое же начало. У меня список городов. Т.е. чтобы при клике выпадал весь список (там очень много), а при вводе, например, "с" - оставались только "самара", "саратов", "санкт-петербург", при дальнейшем вводе "сам" - оставалась только "самара".
cityCB.dataProvider = new DataProvider(cityArray); cityCB.addEventListener(Event.CHANGE, cityChoosen); cityCB.editable = true; cityCB.prompt = "Choose"; cityCB.addEventListener(TextEvent.TEXT_INPUT, inputEventCapture); function cityChoosen(event:Event):void { var a:int = cityArray.indexOf(cityCB.selectedItem.label); } TypeError: Error #1009: Cannot access a property or method of a null object reference. at MethodInfo-392() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at fl.controls::ComboBox/onTextInput() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at fl.controls::TextInput/handleChange() Понимаю, что где-то нужно ставить листенер на ввод с клавиатуры, но к чему его цеплять и как? Не получается. |
|
|||||
поиграться со списком можно в CHANGE текстфилда,
но не развалится ли остальная логика комбобокса не могу гарантировать - очень уж он мутный, как и все адобовские компоненты package { import fl.controls.ComboBox; import fl.data.DataProvider; import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { private var cityCB:ComboBox; private var cityArray:Array = ["самара", "саратов", "санкт-петербург"]; public function Main():void { cityCB = new ComboBox(); addChild(cityCB); cityCB.dataProvider = new DataProvider(cityArray); cityCB.editable = true; cityCB.prompt = "Choose"; cityCB.textField.addEventListener(Event.CHANGE, cityCB_textField_change); } private function cityCB_textField_change(e:Event):void { var arr:Array = []; var text:String = cityCB.text; if (text == "")// для пустой строки - полный список { arr = cityArray; }else// для какой-либо строки - список совпадений { for each(var item:String in cityArray) { if (item.substr(0, text.length) == text) { arr.push(item); } } } cityCB.dataProvider = new DataProvider(arr); cityCB.drawNow(); } } } |
|
|||||
.
|
Если у DataProvider есть filterFunction, то нужно сделать через него.
UPD. Посмотрел на fl.data.DataProvider. Не предоставляет оно фильтрацию. |
Часовой пояс GMT +4, время: 16:03. |
|
« Предыдущая тема | Следующая тема » |
|
|