TextAreaにテキストが反映されない場合の回避策。
通常、TextArea.text = "テキスト" で、問題なく値を代入出来ますが、
移動先のフレームに配置してあるTextAreaに代入しようとすると、
これが、うまく反映されません。
通常通りやっても、内部的には値を格納出来ているんですが、
画面上のレンダリングがされない。
そんな時の、回避策。
_rootの1フレーム目に、インスタンス名"directEntry"と"timerEntry"の、
2つのボタンをステージ上に配置して、フレームスクリプトに以下を記述。
stop();
/* 直接代入する
======================================================== */
directEntry.onRelease = function(){
//2フレーム目へ移動
_root.gotoAndStop(2);
//TextAreaにテキストを代入
_root.ta.text = "TextAreaテスト1";
//TextAreaのtextを出力(←値の代入されるが、画面に反映されない。)
//trace(_root.ta.text);
//TextFieldにテキストを代入(問題なく動作)
_root.tf.text = "TextFiledテスト1";
};
/* setTimeoutで代入する
======================================================== */
timerEntry.onRelease = function(){
//2フレーム目へ移動
_root.gotoAndStop(2);
//TextAreaにテキストを代入
setTimeout(function(){_root.ta.text = "TextAreaテスト2";},1);
//TextFieldにテキストを代入(問題なく動作)
_root.tf.text = "TextFiledテスト2";
};
_rootの2フレーム目に、TextArea(インスタンス名:ta)と、
TextField(インスタンス名:tf)をそれぞれ配置し、
繰り返し確認出来るように、戻るボタンも配置。
そして、フレームスクリプトに以下を記述。
/* 戻る
======================================================== */
backbt.onRelease = function(){
_root.gotoAndStop(1);
};
■検証用FLA
textarea.zip(CS3用)
■検証用SWF
『直接代入する』ボタンを押すと、
飛び先の2フレーム目で、TextFieldには代入したテキストが反映されますが、
残念ながら、TextAreaには反映されません。
但し、代入直後にTextAreaのtextプロパティを見る(traceで確認)と、
値は入っている。。
で、これを回避する為に、代入する部分をsetTimeoutを用いて、
時間差をつけて代入してみる。
そうすると、問題なく画面上にも反映されます!
ってことは、時間差を少し入れれば、大丈夫なのかも、
と思って、試しに空のfor文を直前に入れてみたけど、効果なし。
しかも、腑に落ちないのが、setTimeoutの時間を0にしても問題なく動く。
時間差の問題ではないってこと??
たまたま、KAYACさんのこのエントリーを読んで、
やっていることは違うものの、同じTextAreaまわりの事なので、
もしかしたら、今回の場合にも使えるかも、
と思って試したら、ビンゴでした。
ありがとう、KAYACさん!