0

私は検索を行い、それを見つけることができませんでした。maxChars="3900" の Spark TextArea があります。ただし、テキスト領域にコピー/貼り付けすると機能しません。これを 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にも追加しました。しかし、それはまったくトリガーされません。

私が欠けているものを教えてください。最大制限を超えるたびに、アラートを表示して文字を最大にトリムする必要があります。

ありがとう

ハリッシュ

4

1 に答える 1

2

最初に、1 つのことをクリアする必要があります。変更ハンドラーがトリガーされたとき、それはつまり、テキストが変更されていますが、変更はまだ適用されていないことを意味します。

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 に答える