假设我有一个包含 50 个状态的 DropDownList。我想输入字母"C + O + L"跳转到科罗拉多州,就像Firefox和大多数应用程序一样。
现在,它正在从加利福尼亚跳到俄亥俄州,以路易斯安那州结束......有人知道一个简单的方法吗?
多谢!
您可以尝试创建一个扩展 DropDownList 的自定义组件,并覆盖有问题的函数以添加所需的功能。 这是我能想到的更改默认功能的唯一方法。
就像@J_A_X提议的那样,我修改了 DropDownList 类,添加一个计时器,该计时器将用户正在键入的字符串保留 3/4 秒,然后重置它。这是我的解决方案:
package MyComps
{
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.utils.setTimeout;
import mx.core.mx_internal;
import spark.components.DropDownList;
use namespace mx_internal;
public class DropDownListKeyboardSelection extends DropDownList
{
private var _duration:Number = 750; // Time in milliseconds before the _str is resetted
private var _timer:Timer;
private var _str:String = '';
public function DropDownListKeyboardSelection()
{
super();
}
override mx_internal function findKey(eventCode:int):Boolean
{
if (!dataProvider || dataProvider.length == 0)
return false;
if (eventCode >= 33 && eventCode <= 126)
{
var matchingIndex:Number;
var keyString:String = String.fromCharCode(eventCode);
// Freshly instantiated or resetted by timerEnded(). In that case, we start the timer
if (_str == '') {
startTimer();
} else {
_timer.reset();
startTimer();
}
// Building the string to find
_str += keyString;
matchingIndex = findStringLoop(_str, 0, dataProvider.length);
// We didn't find the item, loop back to the top
if (matchingIndex == -1)
{
matchingIndex = findStringLoop(keyString, 0, 0);
}
if (matchingIndex != -1)
{
if (isDropDownOpen)
changeHighlightedSelection(matchingIndex);
else
setSelectedIndex(matchingIndex, true);
return true;
}
}
return false;
}
// Let's start the _timer
private function startTimer():void
{
_timer = new Timer(_duration);
_timer.addEventListener(TimerEvent.TIMER, timerEnded);
_timer.start();
}
// Timer ended, let's reset the _str variable
private function timerEnded(event:TimerEvent):void
{
_str = '';
_timer.reset();
}
}
}
我相信这取决于浏览器(如果使用标准列表元素)。您可以通过jquery创建一个自动完成字段(尽管这与下拉列表不同)。