使用JavaScript腳本無法直接改變Asp.net中Checkbox控件的Enable屬性的解決方法
今天工作中遇到個(gè)小問題,情況如下,當(dāng)我在后臺頁面中設(shè)置Checkbox的Enable的值為false時(shí),我在前端頁面中使用腳本(chk.disabled = false),無法改變disabled的值為false,代碼如下:
前臺代碼:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function foo() { var chk = document.getElementById("<%=chkBlog.ClientID %>"); if (chk.disabled) { chk.disabled = false; } else { chk.disabled = true; } } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:CheckBox ID="chkBlog" runat="server" Text="http://owen-zhang.cnblogs.com"></asp:CheckBox> <asp:Button ID="btnCheck" runat="server" Text="Client check" OnClientClick="foo();return false;" /> </div> </form> </body> </html>
后臺代碼:
protected void Page_Load(object sender, EventArgs e) { this.chkBlog.Enabled = false; }
為什么會出現(xiàn)這種情況呢,讓我們看一下html的源碼,如下:
<span disabled="disabled"> <input id="chkBlog" type="checkbox" name="chkBlog" disabled="disabled" /> <label for="chkBlog">http://owen-zhang.cnblogs.com</label> </span>
原來Checkbox控件在Enable屬性為false時(shí),輸出到Html中變成了一組控件(element),而不是我們預(yù)想的一個(gè)控件。
方案一:
在上面的代碼中,雖然我們改變了chkBlog控件的disabled屬性為false,但是chkBlog控件的父節(jié)點(diǎn)(<span>)的disabled屬性卻還是disabled。這個(gè)就有一個(gè)優(yōu)先級的問題了,一般是父節(jié)點(diǎn)的優(yōu)先級要大于子節(jié)點(diǎn),所以,我們要改變父節(jié)點(diǎn)的disabled的值,上面的客戶端腳本代碼要做一點(diǎn)小的修改,如下:
<script type="text/javascript"> function foo() { var chk = document.getElementById("<%=chkBlog.ClientID %>"); if (chk.disabled) { chk.parentNode.disabled = false; chk.disabled = false; } else { chk.parentNode.disabled = true; chk.disabled = true; } } </script>
只有加上上面高亮顯示的代碼。
方案二:
使用方案一的話,就必須添加一條額外的改變父節(jié)點(diǎn)disabled屬性的語句,當(dāng)要修改的地方比較多的時(shí)候,就比較麻煩了,而且也不符合一般的代碼邏輯,有冗余的代碼。有沒有其他更簡練的辦法呢?有~,我們只需要修改后臺代碼,如下:
protected void Page_Load(object sender, EventArgs e) { this.chkBlog.InputAttributes.Add("disabled", "disabled"); }
也就是,我們不改變Checkbox的Enable屬性,而是通過InputAttributes中的屬性設(shè)置,改變了Checkbox輸出到客戶端的Html內(nèi)容,如下:
<input id="chkBlog" type="checkbox" name="chkBlog" disabled="disabled" /> <label for="chkBlog">http://owen-zhang.cnblogs.com</label>
之前“冗余的”父節(jié)點(diǎn),現(xiàn)在沒有了。
相關(guān)文章
js位運(yùn)算在實(shí)際中使用的實(shí)例教程
我們可能很少在編程中用位運(yùn)算,如果沒深入學(xué)習(xí),可能也很難理解,下面這篇文章主要給大家介紹了關(guān)于js位運(yùn)算在實(shí)際中使用的相關(guān)資料,需要的朋友可以參考下2022-03-03JavaScript自定義等待wait函數(shù)實(shí)例分析
這篇文章主要介紹了JavaScript自定義等待wait函數(shù),實(shí)例分析了自定義等待函數(shù)的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2015-03-03使用Bootstrap美化按鈕實(shí)例代碼(demo)
這篇文章主要介紹了使用Bootstrap美化按鈕實(shí)例代碼(demo),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02