我进行了搜索,无法找到它。我们有一个带有MaxChars =" 3900"的Spark Textarea。但是,当复制/粘贴到文本区域时,它行不通。我试图将其添加到更改中:
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添加了相同的内容。但这根本不会触发。
请让我想知道我缺少什么。我需要显示一个警报&每次超过最大限制时,将字符的最大限制到最大。
谢谢
harish
首先,我们需要清除一件事:当触发更换处理程序时,这就是手段:文本正在改变,但更改尚未适用。
如果您的文本中的文本为"(空),现在,我粘贴了1600个字符,调用的处理程序被调用,文本的长度仍然为0,因为它正在变化,而不是更改。
现在,如果您有一个更改处理程序,当您追踪长度时,应该是1600。
但是,如果您使用" event.preventdefault();";在您更改的方法中,无需采取任何行动来更改更换处理程序中的文本,不应触发更改处理程序。
所以,我的建议是:
- 使用更换处理程序是正确的。
- 在处理程序中,在剪贴板中获取文本,然后您可以在剪贴板中获取文本的长度,并使用此长度 textarea.textare.text.length ,如果您可以获得长度糊处理了。如果总Lenght大于您的limition,则可以防止事件,并做任何您想做的事情。
这是您的一些代码:
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.
}
}
}