- PR -

ASP.NET2.0 FireFox で RadioButtonList 内の全 ListItem を Disabled する。

1
投稿者投稿内容
レイ
会議室デビュー日: 2008/06/09
投稿数: 3
投稿日時: 2008-06-11 19:58
お世話になっています。

表題の件ですが、IEをメインに作成していたのですが、
FireFox で動作確認したら disabled されないという現象が確認出来ました。

そこで以下のようにしようとしたのですが、ListItem には
ID が振れないので Visual Stdio に怒られてしまいます。
(この部分で怒られる ↓)
(document.getElementById('" & Me.idRadioButtonList_0.ClientID & "').disabled = true;)

<asp:CheckBox ID="idCheckBox" runat="server" Text="チェック" />
<asp:RadioButtonList ID="idRadioButtonList" runat="server">
<asp:ListItem value="0" Text="OK" Selected="true" />
<asp:ListItem value="1" Text="NG" />
</asp:RadioButtonList>

Private Sub createJavaScript()
Dim wScript As New StringBuilder
With wScript
.Append("<script language='JavaScript'>" & vbCrLf)
.Append("<!--" & vbCrLf)
.Append("function TestFunction() {" & vbCrLf)
.Append(" if (document.getElementById('" & Me.idCheckBox.ClientID & "').checked) {" & vbCrLf)
.Append(" if (navigator.appName.toUpperCase() == 'NETSCAPE') {" & vbCrLf)
.Append(" document.getElementById('" & Me.idRadioButtonList_0.ClientID & "').disabled = true;" & vbCrLf)
.Append(" document.getElementById('" & Me.idRadioButtonList_1.ClientID & "').disabled = true;" & vbCrLf)
.Append(" } else {" & vbCrLf)
.Append(" document.getElementById('" & Me.idRadioButtonList.ClientID & "').disabled = '';" & vbCrLf)
.Append(" }" & vbCrLf)
.Append(" } else {" & vbCrLf)
.Append(" if (navigator.appName.toUpperCase() == 'NETSCAPE') {" & vbCrLf)
.Append(" document.getElementById('" & Me.idRadioButtonList_0.ClientID & "').disabled = false;" & vbCrLf)
.Append(" document.getElementById('" & Me.idRadioButtonList_1.ClientID & "').disabled = false;" & vbCrLf)
.Append(" } else {" & vbCrLf)
.Append(" document.getElementById('" & Me.idRadioButtonList.ClientID & "').disabled = 'disabled';" & vbCrLf)
.Append(" }" & vbCrLf)
.Append(" }" & vbCrLf)
.Append("}" & vbCrLf)
.Append("//-->" & vbCrLf)
.Append("</script>" & vbCrLf)
End With
ClientScript.RegisterStartupScript(Me.GetType(), "chk", wScript.ToString)
End Sub

if (navigator.appName.toUpperCase() == 'NETSCAPE') { の
部分もこれでいいのかどうかとっても疑問です。

どなたかご存知の方がいらっしゃればアドバイス宜しくお願いします。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-06-11 22:10
画面のほかの場所でRadioButtonを使っていないという前提であれば、こんな方法が。

コード:
function disableAllRadioButtons() {
    var items = document.getElementsByTagName("INPUT");
    for( i = 0; i < items.length; i++ ) {
        if ( items[i].type == "radio" ) {
            items[i].disabled = true;
        }
    }
}


# ただし、うまくいくかどうか試していません。
# FireFoxの確認環境が手元にないので…。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-06-11 23:29
コード:
<BODY>

<!--
<asp:CheckedListBox ... /> の展開予想図です。
↓
-->

<div disabled="true" id="CheckedListBox1">

<input type=checkbox name="chk" />
<input type=checkbox name="chk" />
<input type=checkbox name="chk" />
<input type=checkbox name="chk" checked="true" />
<input type=checkbox name="chk" />

</div>

<!--
<asp:CheckedListBox id="CheckedListBox1" />
-->
<script>
(function(id) {
	var ff = navigator.userAgent.indexOf("Firefox") > -1;
	
	if (ff) {
		var o = document.getElementById(id);
		var chks = o.getElementsByTagName("input");
		for (var i=0;i < chks.length;i++) {
			chks[i].disabled = true;
		}
	}
})("CheckedListBox1"); //<-- ここに "<%= CheckedListBox1.CientID %>" ってやってあげる
</script>

</BODY>




例は、CheckedListBox ですが、ラジオボタンリストに置き換えて下さい。
ファイヤーの時だけこのスクリプトが動くので、ASPXにダイレクトで実装して
もらった方が楽でしょう。コードでスクリプト文字列生成すると出来上がり
でまごまごしちゃうので。

CheckedListBox にしろ、RadioButtonList にしろ、どっちでも、そのリスト
アイテム群は <div> タグで囲まれるので、上記のように書けます。

Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2008-06-14 16:04
jQueryを利用すると1行のステートメントを記述するだけで実現できるんですけどね。

$("div input[type=checkbox]").attr("disabled","disabled");

$("div input[type=radio]").attr("disabled","disabled");
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
1

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