Flex spark TextArea限制复制/粘贴时的最大字符数

时间:2012-10-25 19:50:26

标签: flex textarea max flex-spark

我进行了搜索但无法找到它。我们有一个Spark TextArea,maxChars =“3900”。但是在复制/粘贴到文本区域时它不起作用。我试着将它添加到changingHandler:

 if (ta.text.length > 3900)
        {
                        Alert.show("The maximum characters length is 3900. Please limit the characters to the max limit");
                        ta.text = ta.text.substr(0, 3900);
                    } else 
                    {
                        if (event.operation is PasteOperation)
                        {
....//Other logic
                        }
       }

问题是它不能一直工作。当警报超过3900个字符时,警报仅显示一些时间。不知道为什么。我也将相同的内容添加到changeHandler中。但这根本不会被触发。

请告诉我缺少的东西。我需要显示一个警报&每次超过最大限制时,将字符调整到最大值。

由于

哈里什

1 个答案:

答案 0 :(得分:2)

首先,我们需要澄清一件事:当触发更改处理程序时,这意味着:文本正在更改,但更改尚未应用。

如果textare中的文本是“”(空),现在,我粘贴1600个字符,调用更改处理程序,文本的长度仍为0,因为它正在改变,而不是更改。

现在,如果你有一个改变处理程序,当你追踪长度时,它应该是1600。

但是,如果你使用“event.preventDefault();”在更改方法中,并且不更改更改处理程序中的文本时,不应触发更改处理程序。

所以,我的建议是:

  1. 使用更改处理程序是正确的。
  2. 在处理程序中,获取剪贴板中的文本,然后你可以获取剪贴板中文本的长度,使用此长度+ textArea.text.length ,如果是粘贴处理。 如果总长度大于您的限制,您可以阻止该事件,并做任何您想做的事情。
  3. 这里有一些代码:

    protected function textArea_changingHandler(event:TextOperationEvent):void
            {
                trace(event.type + " - " + textArea.text.length); //  this length is befor the paste
    
                if(event.operation is PasteOperation) {
                    // Text in the clipboard.
                    var textPaste:String = Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) == null ? "" : Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) as String; 
                    // this length is after the paste(if the paste will complete)
                    var totalLength:int = textArea.text.length + textPaste.length; 
                    trace("String length after Paste: " + totalLength);
    
                    if(totalLength > 3900) {
                        event.preventDefault();
                        textArea.text += "[Paste:" + textPaste.substr(0, 2) + "]"; // process your text here. 
                    }
                }
            }