- ベストアンサー
2つのコンボボックスの操作
お世話になります。 AとBの2つのコンボボックスを設置してそれぞれ動くようにしています。 コンボボックスAが選択されているときはBをenabled=falseのように動かせないようにしたいのですが、それは可能でしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
最初,ご質問を見たとき, 何を質問されているのかわかったような気がしたのですが, 考えているうちに何がご質問なのかさっぱりわからなくなりました...。 > コンボボックスAが選択されているときは > Bをenabled=falseのように動かせないようにしたい 一応,次のスクリプトで一瞬(1回)だけできると言えばできますよ。 インスタンス名 A と B のコンボボックスがあるフレームに書くスクリプトです。 ----------------------------------- // A 用リスナーオブジェクトの作成 var AListener = new Object(); // A が open したときの動作定義 AListener.open = function() { B.enabled = false; }; // A が close したときの動作定義 AListener.close = function() { B.enabled = true; }; // A にリスナーを追加する A.addEventListener("open", AListener); A.addEventListener("close", AListener); // // ------ // // B 用リスナーオブジェクトの作成 var BListener = new Object(); // B が open したときの動作定義 BListener.open = function() { A.enabled = false; }; // B が close したときの動作定義 BListener.close = function() { A.enabled = true; }; // B にリスナーを追加する B.addEventListener("open", BListener); B.addEventListener("close", BListener); ----------------------------------- これでよろしいのでしょうか。 ご質問通りだと上記のようになる気がします。 しかし,これで良いのか悪いのかがわかりません。 上のスクリプトで, まず,仮に A をクリックして A を open したとします。 A が open すると B の enabled が false になります。 しかし, 次に B をクリックしようとも,B以外の場所をクリックしようとも, A は close してしまいます。 A が close すると B の enabled が true になるのですから, 1回目の B のクリックしか無効になりません。 しかし,1回だけは B の enabled は false にはなります。 でも一応は, コンボボックスA が選択されているときは B が enabled=false にはなっていると思います。 ====================== A が open した後に, A 以外の場所をクリックした場合は, B の enabled は false にしたままで, A が open した後に, A をクリックした場合にのみ, B の enabled を true にするのでしたら次のようになります。 ----------------------------------- // A 用リスナーオブジェクトの作成 var AListener = new Object(); // A が open したときの動作定義 AListener.open = function() { B.enabled = false; }; // A にリスナーを追加する。 A.addEventListener("open", AListener); // // ------ // // B 用リスナーオブジェクトの作成 var BListener = new Object(); // B が open したときの動作定義 BListener.open = function() { A.enabled = false; }; // B にリスナーを追加する。 B.addEventListener("open", BListener); // // ------ // // マウス監視用リスナーオブジェクトの作成 var mouseListener = new Object(); mouseListener.onMouseDown = function() { // 当たり判定 if (A.hitTest(_root._xmouse, _root._ymouse)) { _root.B.enabled = true; } else if (B.hitTest(_root._xmouse, _root._ymouse)) { _root.A.enabled = true; } }; // マウスクラスにリスナーを追加する Mouse.addListener(mouseListener); ----------------------------------- 私が勝手に感じるだけかもしれませんが, なんか,これでも動作が変だと思うのです。 ですから, 考えているうちに何がご質問なのかさっぱりわからなくなったわけです。 思うに, コンボボックス A や B の enabled が問題なのではなくて, ある コンボボックス が open している状態で, その コンボボックス 以外の場所をクリックすると, その コンボボックスが close してしまうという仕様が問題なのではないでしょうか? 結局,ご質問が理解できないままですし, また, コンボボックス が勝手に close してしまうのを阻止するような方法も私はわかりませんが, 一応,回答いたしました。 コンポーネントリファレンスガイド ComboBox コンポーネント > ComboBox.open http://livedocs.adobe.com/flash/8_jp/main/00003186.html