0

我进行了搜索,但无法找到它。我们有一个 maxChars="3900" 的 Spark TextArea。但是当复制/粘贴到文本区域时它不起作用。我试图将其添加到 changeHandler 中:

 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 中。但这根本不会被触发。

请让我知道我错过了什么。每次超过最大限制时,我都需要显示警报并将字符修剪到最大值。

谢谢

哈里什

4

1 回答 1

2

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

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

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

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

所以,我的建议是:

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

这是给你的一些代码:

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. 
                }
            }
        }
于 2012-11-01T03:53:02.310 回答