0

TextInput如果文本的宽度大于指定的数量,我想防止将字符添加到 a中。我遇到的第一个问题是这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();     
} 
4

2 回答 2

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();     
        } 
于 2013-09-14T18:01:12.993 回答
0

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

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

它可能不会。

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

<s:TextInput maxChars="20"/>

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

于 2013-09-14T17:58:57.020 回答