先来看下演示,体验下其效果。
实际上这并不算完整的自动完成的功能,但提供flex实现输入框自动完成功能的核心。我们来看下其源代码。
完整源代码:
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
- <mx:Script>
- <![CDATA[
- [Bindable]
- private var allWords:Array = ["apple", "boy", "cat","milk", "orange", "pepper", "recipe", "truck"];
- private var regexp:RegExp;
- private function checkInput():void{
- var tmp:Array = allWords.filter(filter);
- input.text = tmp[0];
- }
- private function filter(element:*,index:int,arr:Array):Boolean{
- regexp = new RegExp(input.text);
- return (regexp.test(element as String));
- }
- ]]>
- </mx:Script>
- <mx:Canvas width="400" height="300">
- <mx:TextInput id="input" change="checkInput()" x="120" y="100"/>
- </mx:Canvas>
- </mx:Application>
关键要点说明:
- 使用TextInput 组建的change 事件监听用户输入
- 使用数组的filter过滤函数
- 使用正则表达式测试词典里是否有何用户输入的内容相匹配的单词
来看其关键代码:
checkInput()
- private function checkInput():void{
- var tmp:Array = allWords.filter(filter);
- input.text = tmp[0];
- }
这里最关键的是建立个临时数组tmp来获取经过过滤后的数组,将值写入输入框。filter()中的filter未过滤回调函数。
filter
- private function filter(element:*,index:int,arr:Array):Boolean{
- regexp = new RegExp(input.text);
- return (regexp.test(element as String));
- }
使用正则来匹配单词数组与输入框的值。

都是很技术的活啊 呵呵 看不懂 ~!