この人頭いいなと思ったエピソード

こんにちは

Dojo v1.7で開発を行っている者です。

開発しているモジュールで、dijit.form.ComboBoxを使用しているのですが、
ドロップダウンリストの項目を入力不可(選択は可能)にしたいと思っています。

プロパティで、readOnly:trueを設定してしまいますと、ドロップダウンリストも読取り専用になってしまい、選択出来なくなってしまいます。

どなたか、上記問題の解決をご存知の方おりますでしょうか?

A 回答 (2件)

お返事が大変遅くなりましたorz



そういうことでしたらComboBoxを使わざるを得ませんね……。
ちょっと調査してみたところ、
「dijit.byId("widget_id").textbox」でコンボボックスのテキストボックス部分にアクセスできるようです。
そのため、
 dijit.byId("widget_id").textbox.readOnly=true;
と書けば、とりあえずはテキストボックス部分のみ入力不可にできます。

ですが、何かの拍子にDojoがreadOnlyの設定を戻してしまうことも考えられますので、
入念にテストした方がいいかもしれません。
    • good
    • 0
この回答へのお礼

たびたび、アドバイスをして頂きありがとうございます。

製品サポートの部隊の方にも伺いまして、ComboBoxを継承しているクラスを呼び出している場所に、以下の様に設定し、無事希望通りの動作になりました。

■調査方法
----------------------------------------------------------------------------------
1. dijit/form/ComboBox.jsを確認すると、(ValidationTextBox.jsと)dijit/form/ComboBoxMixin.jsを継承している
2. dijit/form/ComboBoxMixin.jsを確認すると、templateとしてdijit/form/templates/DropDownBox.htmlを使用していることが確認できる
3. dijit/form/tesmplates/DropDownBox.htmlを確認すると、文字列入力用のinputタグが、data-dojo-attach-point属性によりfocusNodeという要素名でアクセスできることを確認できる
4. したがって、インスタンス生成後に{ComboBoxインスタンス}.focusNodeの属性としてreadonlyを付与することで、ユーザーからのテキスト入力だけ無効化出来ることが分かる
----------------------------------------------------------------------------------


■上記処理を、呼び出し元から設定する

require( ~"dojo/dom-attr");
function( domAttr ){
   ~
   ~
   ~
};
var ABCD(※) = new ABCD(キー情報,"キー情報"); 
 for (var i = 0; i < finder.level - 1; ++i) {
domAttr.set(ABCD._selectors[i].focusNode, "readonly", "readonly");
 }
);

※ABCDは、digit.form.ComboBoxを使用しているクラス


本当にありがとうございました(^^)/~

お礼日時:2013/04/09 16:00

dijit.form.Selectではダメですか?

    • good
    • 0
この回答へのお礼

Picosoftさん
早速の回答ありがとうございます。

開発では、パッケージソフトの機能を一部カスタマイズします。
dijit.form.ComboBoxは製品が提供している基本機能になりますので、
そこを別のメソッドを使用すると、大きく他の箇所も修正をする事になってしまいます。

その為、dijit.form.ComboBoxで実現させたいと思っております。

お礼日時:2013/04/04 15:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報