CS3(AS2)プロジェクトに標準のFlashComboBoxコンポーネントを追加しました。これは私のライブラリシンボルの一部であり、ステージ上では作成されません。
ComboBoxのスキニングやソースコードなどは変更していません。
ユーザーがComboBoxをクリックすると、リストがドロップダウンし、ユーザーはマウスを使用してアイテムを選択し、そのアイテムはそれに作用するコードに渡されます。
Flash IDEでは、すべてが正常に機能します。しかし、これをWebサイトに展開し、Webブラウザーを介してFlashページを表示すると、ユーザーがドロップダウンリストの値をクリックすると、別の値が選択され、入力ボックスに表示されます。(私はMACでFirefox 3.0.12を使用していますが、QAでは他のブラウザーやバージョンで問題が発生しています)。これと同じ誤った値が、変更イベントのコールバックにも渡されます。
この問題は、FlashPlayer9および10で明らかです。
ComboBoxから値を取得する2つの方法を試しました。
a)コンポーネントに直接アクセスして選択を取得します。このアプローチを使用する場合、ユーザーがキーボードを使用して値を選択するか、数値を直接入力すると、IDEとブラウザーで機能します。マウスの選択のみが失敗します。
var num_pages_value:Number = Number(num_pages.num_pages_cb.selectedItem["data"]);
b)イベントハンドラーを使用します。このアプローチを使用すると、ComboBoxへのキーボードアクセスが機能しなくなります。イベントハンドラーの設定方法は次のとおりです。
var cb:ComboBox = num_pages.num_pages_cb;
// mx.events.EventDispatcher.initializeがないと、変更イベントが発生することはありません!!!
//ドキュメントにはありません。これを見つけるのはとても難しいようでした...mx.events.EventDispatcher.initialize(cb); cb.addEventListener( "change"、this);
これがイベントハンドラー自体です。
関数change(evt){num_pages_value = Number(evt.target.selectedItem.label); }
mx.events.EventDispatcher.initializeの呼び出しがキーボードの相互作用を壊すものだと思いますが、それがないとハンドラーは呼び出されません。ただし、どちらのアプローチでも、ユーザーは必要な値を選択できません。7を選択すると9が得られ、3を選択すると6が得られます。また、得られる値は毎回同じではありません。