次のコードは、1 つの要素の選択されたプロパティを設定し、チェックボックスがオンになっている値が変更されたときにその要素を切り替えます。
ASP.NET
<asp:CheckBox CssClass="Cb" RunAt="Server"/>
<asp:TextBox CssClass="Txt" RunAt="Server" ReadOnly="True"/>
HTML
<input class="Cb" type="checkbox"/>
<input class="Txt" type="text" readonly="true"/>
Jクエリ
$(".Cb").change(function() {
$(".Txt").prop("readonly",!this.checked);
});
実施例
問題
このコードを ASP.NET の asp:checkbox で実行すると、input:checkbox でコードを実行した場合と結果が異なります。
input:checkbox を使用すると、読み取り専用状態が次のように切り替わります。
初期状態
<input class="Txt" type="text" readonly="true"/>
トグル
<input class="Txt" type="text"/>
<input class="Txt" type="text" readonly=""/>
asp:checkbox を使用すると、読み取り専用状態が次のように切り替わります。
初期状態
<input class="Txt" type="text" readonly="readonly"/>
トグル
<input class="Txt" type="text" readonly=""/>
<input class="Txt" type="text" readonly=""/>
読み取り専用を理解する
次のすべてのプロパティは、読み取り専用を true に設定するために有効です。
- 読み取り専用
- 読み取り専用=""
- 読み取り専用="真"
- readonly="読み取り専用"
私の質問
jquery/javascriptでasp.netを使用するときに読み取り専用プロパティを削除してから切り替える方法は?
編集
問題は、asp:checkbox を使用すると、クラスが正しくない要素に適用されることです。
これ
<asp:CheckBox CssClass="Cb" RunAt="Server"/>
ブラウザでのレンダリング
<span class="Cb"><input id="ctl01" type="checkbox" name="ctl01" /></span>
ソリューション
クラスではなく ID を使用して asp:checkbox をターゲットにします。
<asp:CheckBox ID="CBID" CssClass="Cb" RunAt="Server"/>
$("#<%= CBID.ClientID %>").change(function() {
$(".Txt").prop("readonly", this.checked ? "" : "readonly");
});