Я только что столкнулся с этим.
установка maxChars для textArea предоставит ограничение для текстовой области, но это не будет отражать количество символов, которые может ввести пользователь.
когда пользователь печатает, за кулисами добавляется разметка, что значительно увеличивает количество символов.
например, если я наберу букву 'a' в RichTextEditor, я получу число символов 142 и этот htmlText:
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="10" COLOR="#0B333C" LETTERSPACING="0" KERNING="0">a</FONT></P></TEXTFORMAT>
Я не мог найти простой способ получить правильный maxChar для работы из коробки, поэтому я расширил RichTextEditor и дал ему maxChar. если maxChar> 0, я добавил слушателя в «change» и сделал что-то подобное в обработчике событий:
protected function handleTextChange(event:Event) : void
{
var htmlCount:int = htmlText.length;
// if we're within limits, ensure we reset
if (htmlCount < maxChars)
{
textArea.maxChars = 0;
this.errorString = null;
}
// otherwise, produce an error string and set the component so the user
// can't keep typing.
else
{
var textCount:int = textArea.text.length;
textArea.maxChars = textCount;
var msg:String = "Maximum character count exceeded. " +
"You are using " + htmlCount + " of " + maxChars + " characters.";
this.errorString = msg;
}
}
Идея состоит в том, чтобы применять maxChars к текстовой области только в состоянии ошибки, поэтому пользователь не может вводить что-либо дополнительное и ему будет предложено удалить некоторые символы. как только мы выйдем из состояния ошибки, нам нужно установить значение textArea.maxChars в ноль, чтобы они могли продолжить.