在flex项目中,我在表单上有一个滑块和文本框,我可以使用滑块(为了方便(或文本输入(为了精确的数字(来寻求用户输入。根据用户对其中任何一个的输入,我通过连接的监听器更新另一个,该监听器调用相关函数
slider.addEventListener("change",sliderUpdate);
textIn.addEventListener("change",valueUpdate);
我在文本输入方面遇到了问题,因为它不允许我输入十进制数字-这可能是因为我有一个监听器,它在文本输入中每次按键都会增加滑块,因此无法接受"."。例如.05、.1、.00003
我该如何解决这个问题?我可以按住文本输入监听器,直到我可以按下回车键来表示我完成了吗?
这对我有效:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
import spark.events.TextOperationEvent;
protected function sliderUpdate(event:Event):void
{
textIn.text=slider.value.toString();
}
protected function valueUpdate(event:TextOperationEvent):void
{
slider.value=Number(textIn.text);
}
]]>
</fx:Script>
<s:HSlider id="slider" x="10" y="106" width="308" change="sliderUpdate(event)" maximum="100.0" minimum="0.0" stepSize="0.01"/>
<s:TextInput id="textIn" x="10" y="76" width="87" change="valueUpdate(event)" text="0"/>
</s:Application>
滑块的步长值为0.01;如果在文本字段中输入值,则滑块应自动更新。
编辑:
然后在TextInput上,您应该监听keyDown事件(KeyboardEvent.KEY_DOWN(,功能应该检查按下的键是否为ENTER,然后更新滑块:
<s:TextInput id="textIn" x="10" y="76" width="87" keyDown="textIn_keyDownHandler(event)" text="0"/>
功能:
protected function textIn_keyDownHandler(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.ENTER)
{
slider.value=Number(textIn.text);
}
}
如果您更喜欢使用addEventListener,那么应该这样做:
textIn.addEventListener(KeyboardEvent.KEY_DOWN, textIn_keyDownHandler);