Flex:preventDefault不会阻止添加char

时间:2013-09-14 17:19:17

标签: actionscript-3 flex actionscript

如果文本的宽度大于指定的数量,我想阻止将字符添加到TextInput。我遇到的第一个问题是preventDefault没有像我预期的那样阻止添加任何字符。对此有解释吗?我怎么能实现我想要的?

<s:TextInput id="textInput0"/>

protected function creationCompleteHandler(event:FlexEvent):void
{
    textInput0.addEventListener(KeyboardEvent.KEY_DOWN, checkWidthOfText, false, 0, true);
}
protected function checkWidthOfText(event:KeyboardEvent):void{

    event.preventDefault();     
} 

2 个答案:

答案 0 :(得分:2)

只需使用capture事件阶段和TextEvent.TEXT_INPUT事件:

        protected function creationCompleteHandler(event:FlexEvent):void
        {
            textInput0.addEventListener(TextEvent.TEXT_INPUT, checkWidthOfText, true, 0, true);
        }
        protected function checkWidthOfText(event:TextEvent):void{

            event.preventDefault();     
        } 

答案 1 :(得分:0)

preventDefault()仅在您尝试更改实际行为的组件实现某些预防机制时才有效。更具体地说,在这种情况下,文本字段(我说文字字段,因为Flex TextInput使用核心Flash TextField)就必须执行以下操作:

if (!keyDownEvt.isDefaultPrevented()) insertKey(keyDownEvt.charCode);

它可能没有。

至于问题的解决方案:可以通过使用TextInput的maxChars属性来实现:

<s:TextInput maxChars="20"/>

或者你的意思是物理宽度而不是字符数量?

相关问题