如果文本的宽度大于指定的数量,我想阻止将字符添加到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();
}
答案 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"/>
或者你的意思是物理宽度而不是字符数量?