- ベストアンサー
動的に追加したコントロールについて
- ASPをVBScriptで作成している際、DBから検索した結果に応じて動的にコントロールを追加しているが、それらのコントロールに対して属性変更を行いたい。しかし、現在の方法では「オブジェクトがありません」というエラーが発生してしまう。
- 指定した方法では、追加されたコントロールをループして属性変更することができない。エラーの原因としては、コントロールを文字符号列として扱っているため、正しくオブジェクトを参照できずにいる。
- コントロールを動的に追加した後、それらのコントロールに対して属性変更を行いたい場合は、コントロールを参照するためのオブジェクトを適切に作成する必要がある。コントロールが追加された際にオブジェクトを作成し、それをループ内で利用することで、属性変更が可能となる。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> クライアントサイドでの話です。 > 画面でのアクションによって動的なコントロールの属性を変更したいのです。 なるほど。 こういう場合は、Documentオブジェクト(又はそれに紐ついたコレクション)から、コントロールのオブジェクトを参照して操作します。 例えば、ID="Control1"のオブジェクトが1つしかないなら、 ------------------------------------------------------ <HTML><HEAD><TITLE>TEST</TITLE> <SCRIPT LANGUAGE=VBSCRIPT> Sub X() Dim objTest Set objTest = Document.getElementByID("Control1") objTest.style.backgroundColor=&H0& End Sub </SCRIPT> </HEAD> <BODY> <FORM> <INPUT TYPE=TEXT ID="Control1" > <INPUT TYPE=BUTTON onClick="X()"> </FORM> </BODY> </HTML> --------------------------------------------------------- こういうHTMLを生成すれば、IDが「Control1」のエレメントを操作できます。
その他の回答 (4)
- loop_dog
- ベストアンサー率32% (14/43)
横槍ですが。。。 >Dim objTest とは、どんなコントロールですか? そのコントロールのインスタンスを作成していなければ、 >「オブジェクトがありません」 というのは当たり前のことですし、 (何かをSETしていれば、別ですが) そのコントロールに >.bgcolor という、プロパティーが無ければ、代入は無理だと思います。
お礼
回答ありがとうございます。 No4の回答で解決しました。
- dsuekichi
- ベストアンサー率64% (171/265)
ASPなんですよね? クライアントサイドではなく、サーバサイドの話ですよね? サーバサイドの実行時に、コントロールは存在しませんよ。 クライアント(ブラウザ)に表示する際に始めてオブジェクトが作成されますから・・・ ASPは、基本的に「HTMLタグを生成する」のが仕事です。 HTMLタグを出力する時に属性として指定してください。 #動的ではなく、固定個数で表示する場合の指定方法と同じです。 出力の1部をループさせたりして変更してください。 例えば・・・ -------------------------------------------------------- <% Dim iCnt For iCnt = 0 To X %> <INPUT TYPE="TEXT" NAME="Control<%=iCnt%>" bgcolor = "#000000" > <% Next %> -------------------------------------------------------- とか・・・ それとも、ASP側でクライアントサイドのVBSCRIPTを出力しているのでしょうか?
補足
説明不足ですいません。 クライアントサイドでの話です。 画面でのアクションによって動的なコントロールの属性を変更したいのです。 可能でしょか?
- STICKY2006
- ベストアンサー率29% (1536/5269)
忘れてた。。。 http://www2.jiu.ac.jp/~en/VBSdocs/83.htm VBScriptなので、ASPとまったく同じでやっては動きませんでしたね。。。 宣言方法が若干違うぐらいではありますが。。。
補足
Set objTest CreateObject("Control" & iCnt) 上記のようにCreateObjectで動的に作成されたコントロールを指定しても 「ActiveXコンポーネントはオブジェクトを作成できません。:'コントロール名'」 というエラーとなってしまいます。 やりたい事は作成されたコントロールを動的に操作したいのです。 説明が下手で申し訳ありません。
- STICKY2006
- ベストアンサー率29% (1536/5269)
こんちは。 >>Dim objTest >>Dim iCnt これだと、変数の定義かな?? オブジェクトは、宣言しないと使えませんよ? といっても、何をどうしたいのかイマイチ分からないのでなんとも言い様がありませんが。。。。 とりあえず、参考サイトです。。。 http://www.site-cooler.com/kwl/asp/13.htm
お礼
ありがとうございます!! まさにやりたかったのはそういうことです。 私の説明が下手で手間を取らせてしまい申し訳ありませんでした。 本当にありがとうございましたm(_ _)m