- ベストアンサー
選択したリスト項目のラベル名の取り出し方法
- 選択したリスト項目のラベル名を取り出す方法を教えてください。
- 現在、リストボックスで選択した項目のラベル名を取得するスクリプトを作成しています。しかし、選択した項目を確定するまでしかテキストボックスに表示されません。
- 同じように選択した項目に応じて次の作業を行いたいと思っています。どなたか解決方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 選択1回分しかテキストボックスに表示できません。 どこでそうなるのか、 そうなる原因(ポイント)を探す必要があると思います。 私の作ったものではそうならないので原因が推測できません。 ステージ上に 「Listコンポーネント」 インスタンス名「listboxA」 と 「ダイナミックテキストフィールド」 インスタンス名「statusMessage」を用意し それらがあるフレームに次のように書いたとします↓。 ----------------- Shopping_array = new Array(); Shopping_array[0] = {label:"ばなな", data:"1"}; Shopping_array[1] = {label:"みかん", data:"2"}; Shopping_array[2] = {label:"れもん", data:"3"}; Shopping_array[3] = {label:"いちご", data:"4"}; Shopping_array[4] = {label:"めろん", data:"5"}; Shopping_array[5] = {label:"ぶどう", data:"6"}; Shopping_array[6] = {label:"もも", data:"7"}; Shopping_array[7] = {label:"かき", data:"8"}; Shopping_array[8] = {label:"びわ", data:"9"}; Shopping_array[9] = {label:"うめ", data:"10"}; listboxA.dataProvider = Shopping_array; myListBoxListener = new Object(); myListBoxListener.change = function(eventObj) { var eventSource:Array = eventObj.target; var theSelectedItem = eventSource.selectedItem; var theSelectedItemLabel = theSelectedItem.label; msg = theSelectedItemLabel; statusMessage.text = msg; }; listboxA.addEventListener("change", myListBoxListener); ----------------- また上のスクリプトは消して 次のようにも書いてみます↓。 ----------------- Shopping_array = new Array(); for (i = 0; i <= 1000; i++) { Shopping_array[i] = {label:"果物" + i, data:i + 1}; } listboxA.dataProvider = Shopping_array; myListBoxListener = new Object(); myListBoxListener.change = function(eventObj) { var eventSource:Array = eventObj.target; var theSelectedItem = eventSource.selectedItem; var theSelectedItemLabel = theSelectedItem.label; msg = theSelectedItemLabel; statusMessage.text = msg; }; listboxA.addEventListener("change", myListBoxListener); ----------------- ※import されている 4つのクラスは 動作自体に関係しないと思うので その部分は削除しています。 上の2つのどちらのように書いても Listコンポーネント選択回数分だけ テキストフィールドに果物名が表示されますよ。 つまり、 原因は書かれていらっしゃらない部分にあると思います。 もしくは 書いていらっしゃっても状況が理解できないので私が無視した部分です。 (しかし... お久しぶりです。 なつかしいです。何年ぶりでしょうか。 くろくん はあいかわらずお元気でしょうか?)
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
change イベントは基本的に選択するたびに発生するので、1回限りということはないはずですが。 「選択1回分」とはもしや「1項目しか選択できない」という意味で、つまり、2項目以上を同時に選択できるようにして、選択された項目のラベルを全てテキストフィールドに表示したい、とのことでしょうか? この場合は、選択された項目を取得するために見るプロパティが変わります。 スクリプトの一例です。 ステージに List のコンポーネント(インスタンス名: listboxA )と、”複数行表示可能な”ダイナミックテキストのテキストフィールド(インスタンス名: statusMessage )があるとします。 このスクリプトは、メインのタイムラインのフレームに記述してください。 なお、字数の都合上、型の明示は省略させていただきました。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください) //* * * //仮の表示データ Shopping_array = new Array(); Shopping_array = [ { label : "ばなな" , data : "1" } , { label : "りんご" , data : "2" } , { label : "さくらんぼ" , data : "3" } , { label : "みかん" , data : "4" } , { label : "もも" , data : "5" } ]; //管理用の番号を追加(※不要なら削除してください) for( i = 0 ; i < Shopping_array.length ; i++ ) { Shopping_array[ i ].index_num = i; } //データをListに表示 listboxA.dataProvider = Shopping_array; //複数選択を可能にする listboxA.multipleSelection = true; //選択時の処理 myListBoxListener = new Object (); myListBoxListener.change = function ( eventObj ) { var i; var item_list , temp; //選択されている項目のリストを取得 item_list = eventObj.target.selectedItems; //管理番号の順(=List内の順番)に並び替え temp = item_list.sortOn( "index_num" , Array.NUMERIC | Array.RETURNINDEXEDARRAY ); //選択されている項目名を全てテキストフィールドに表示 statusMessage.text = ""; for( i = 0 ; i < item_list.length ; i++ ) { statusMessage.text += item_list[ temp[ i ] ].label + "\n"; } }; listboxA.addEventListener ( "change" , myListBoxListener ); //* * * 複数の項目を選択するには、Ctrl キーを押しながら選択します。Ctrl キーを押しながら選択済みの項目を選択すると、選択が解除されます。 Shift キーを押しながら選択すると、選択されている項目から指定の項目までがまとめて選択されます。 複数選択が可能な場合は、選択された項目は selectedItems というプロパティを見て取得します。 これの正体は配列変数で、選択された順番通りに選択された項目が入ります。例えば上記の例で、List 内では”もも”は”ばなな”より下に表示されますが、”もも”を先に選ぶと、selectedItems には”もも”の方が先に登録されます。 上記の例では表示するデータに管理用の番号( index_num )を追加し、テキストフィールドに表示する前にこの番号の若い順に並べ替えることで、選択順番に関係なく、List に表示されている順に従って表示するようにしています。 選択された順番通りに表示したい場合は、番号の追加と並び替えの処理を削除し、テキストフィールドに表示する部分を statusMessage.text += item_list[ i ].label + "\n"; に変更してください。
お礼
言葉足らずの上、意味を伝え切れなかった質問に対し、 このような丁寧でかつ、ご親切な回答をいただきました事 心より御礼申し上げます。 大変参考になりましたゆえ、早速試したく存じます。 お世話になりました。どうも有り難うございます。
お礼
まことに分かりやすく、ありがたいご指導に感謝するばかりです。 あまりScriptの学習が進んでいないことが、バレてしましました。 なるほど、このとおりにやってみます。 とても助かりました。どうも有り難うございます。 (くろくんは、かなり勢いをもったお方になりました。 過日、出雲大社と須佐神社にお参りに行きまして、 パワーアップしております。貴殿のことは氏からも感謝の言葉を預かりました)