使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法

作者:mrr 时间:2024-05-03 15:06:27 

 今天工作中遇到个小问题,情况如下,当我在后台页面中设置Checkbox的Enable的值为false时,我在前端页面中使用脚本(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;
 }


为什么会出现这种情况呢,让我们看一下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时,输出到Html中变成了一组控件(element),而不是我们预想的一个控件。

方案一:

在上面的代码中,虽然我们改变了chkBlog控件的disabled属性为false,但是chkBlog控件的父节点(<span>)的disabled属性却还是disabled。这个就有一个优先级的问题了,一般是父节点的优先级要大于子节点,所以,我们要改变父节点的disabled的值,上面的客户端脚本代码要做一点小的修改,如下:


<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>

只有加上上面高亮显示的代码。

方案二:

    使用方案一的话,就必须添加一条额外的改变父节点disabled属性的语句,当要修改的地方比较多的时候,就比较麻烦了,而且也不符合一般的代码逻辑,有冗余的代码。有没有其他更简练的办法呢?有~,我们只需要修改后台代码,如下:


 protected void Page_Load(object sender, EventArgs e)
 {
   this.chkBlog.InputAttributes.Add("disabled", "disabled");
 }

也就是,我们不改变Checkbox的Enable属性,而是通过InputAttributes中的属性设置,改变了Checkbox输出到客户端的Html内容,如下:


<input id="chkBlog" type="checkbox" name="chkBlog" disabled="disabled" />
<label for="chkBlog">http://owen-zhang.cnblogs.com</label>

之前“冗余的”父节点,现在没有了。

标签:JS,Asp.net,Checkbox,Enable
0
投稿

猜你喜欢

  • PHP正则表达式替换<pre>标签外的内容

    2023-05-22 10:47:12
  • 详解python使用金山词霸的翻译功能(调试工具断点的使用)

    2021-06-27 03:33:52
  • python基础中的文件对象详解

    2021-10-20 00:22:40
  • ORACLE查询删除重复记录三种方法

    2024-01-19 11:03:10
  • python的几种矩阵相乘的公式详解

    2021-03-28 21:13:56
  • python获取list下标及其值的简单方法

    2023-09-18 08:30:56
  • go mod 使用旧版本 版本号指定方式

    2024-05-21 10:26:17
  • Python标准库使用OrderedDict类的实例讲解

    2022-07-17 22:27:31
  • 用Python实现命令行闹钟脚本实例

    2023-01-19 12:57:09
  • Pycharm基本操作及调试代码

    2022-08-13 08:38:55
  • pytorch索引查找 index_select的例子

    2023-09-12 20:45:05
  • python opencv之SIFT算法示例

    2023-12-27 21:42:33
  • Python中match语句的详细用法实例

    2023-06-29 11:28:46
  • Python translator使用实例

    2021-02-09 22:40:24
  • js实现简单放大镜特效

    2024-04-30 08:51:48
  • Golang工作池的使用实例讲解

    2024-05-08 10:53:14
  • Python中的默认参数实例分析

    2023-02-20 20:19:38
  • python读取csv文件示例(python操作csv)

    2023-02-28 23:12:02
  • 实例演练ASP+XML编程

    2007-10-11 13:53:00
  • Google的YSlow——Page Speed(附插件下载)

    2009-09-27 12:40:00
  • asp之家 网络编程 m.aspxhome.com