- PR -

Webユーザーコントロールに設置したコントロールのClientID プロパティがNetscape4で機能しない?

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 68
投稿日時: 2004-03-22 10:58
※タイトルは乱暴につけました。すいません。

現在、javascriptを組み込んだWebユーザーコントロールを作成しようとしています。
サーバーサイドのPage_Loadメソッドで内部のコントロールにjavascriptを付加して出力しようと考えています。
下記のようなコードビハインドを持つWebユーザーコントロールを書き
Webフォームに設置したところ,IE6やNetscape7では動作したのですが、
Netscape4では動作しませんでした。
コントロールにネストがあった場合、CliantIDプロパティを使って作成したjavascriptを
Netscape4で動作させることはできないのでしょうか??
解決策をご存知でしたら教えていただけないでしょうか。よろしくお願いします。

以下、ソースコード抜粋:
コード:
	public abstract class MyUserControl : System.Web.UI.UserControl
	{
		protected System.Web.UI.HtmlControls.HtmlInputButton Btn;

		private void Page_Load(object sender, System.EventArgs e)
		{
			Btn.Attributes["onclick"] = "return alert(" + Btn.ClientID + ".value);";
		}
	}


動作環境:
Windows2000Pro
.NetFramework 1.0/1.1
IE6/Netscape7(動作)
Netscape4.78 (動作しない...)

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-22 11:31
引用:

仕様書無しさんさんの書き込み (2004-03-22 10:58) より:

Webフォームに設置したところ,IE6やNetscape7では動作したのですが、
Netscape4では動作しませんでした。

コード:
Btn.Attributes["onclick"] = "return alert(" + Btn.ClientID + ".value);";




 詳しくはないのですが。。。
 これって、クライアントサイドでは

alert(ClientID.value);

になりますが、この書き方が、NetScapeのJavaScriptで有効ではないと思います。

alert(document.all[ClientID].value);

こんな感じだったような?

 詳しいところは、"NetScape用の"JavaScriptを調べてください。


 あ、あと、Name属性か、ID属性か、そういうところでも変わると思います。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-03-22 13:33
>件名:Webユーザーコントロールに設置したコントロールのClientID プロパティがNetscape4で機能しない?

はい。
Netscape6未満はid属性(サーバ側のClientID)を対応していないです。
name属性(サーバ側のUniqueID)を使いましょう。

alert(document.forms[0].elements["name属性"].value);

あるいはthisを使うと簡単です。

alert(this.value);

>コントロールにネストがあった場合、CliantIDプロパティを使って作成したjavascriptを
>Netscape4で動作させることはできないのでしょうか??

ネストがない場合もClientIDを使うのは適切ではありません。
# ClientIDとUniqueIDが同じなので動きますが
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2004-03-22 13:43
Netscape4.*のJavaScriptには、随分ふれていないので記憶が定かではありませんが、
引用:

コントロールにネストがあった場合、CliantIDプロパティを使って作成したjavascriptを
Netscape4で動作させることはできないのでしょうか??


.Netで、どういう風に展開されているのかは分りませんが、Netscape4.*系統では、例えば、layer1の中のフォームform1にアクセスする場合に、
コード:
document.layers["layer1"].document.forms["form1"].elements[Btn.ClientID].value


等と、すごく冗長な指定をしなくてはいけなかった記憶があります。
ネストした結果、レイヤーを形成してたとしたら、出力したソースを見ていちいち指定しなくては出来ないかもしれません。

面倒臭いという向きには、例えばこんなものを使ってみるとか、マクロメディアあたりで使われている findObj みたいな関数を使う方法しかないと思います。
未記入
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 68
投稿日時: 2004-03-22 13:58
Jitaさん、todoさん、冬寂さん回答ありがとうございます。

Btn.Attributes["onclick"] =
  "return alert(document.forms[0].elements['" + Btn.UniqueID + "'].value);";

でIE/Netscape4とも動くようになりました。
なるほど、Netscape4でも動作させるためには、ClientID を使う方法は不可で
UniqueIDを直接使うと「:」で切れてしまうため、上記の様に記述する必要があるのですね。

ちなみにこのコードは下記の様に展開されます。

<input name="MyControl1:Btn" id="MyControl1_Btn" type="button"
  onclick="return alert(document.forms[0].elements ['MyControl1:Btn'].value);" />

ありがとうございました。

※コードを整形/修正しました。

[ メッセージ編集済み 編集者: 仕様書無しさん 編集日時 2004-03-22 16:21 ]
1

スキルアップ/キャリアアップ(JOB@IT)