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


Posted in Javascript onSeptember 16, 2015

 今天工作中遇到个小问题,情况如下,当我在后台页面中设置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>

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

Javascript 相关文章推荐
javascript vvorld 在线加密破解方法
Nov 13 Javascript
基于KMP算法JavaScript的实现方法分析
May 03 Javascript
js继承call()和apply()方法总结
Dec 08 Javascript
原生js和jQuery写的网页选项卡特效对比
Apr 27 Javascript
JS+DIV实现鼠标划过切换层效果的方法
May 25 Javascript
尝试动手制作javascript放大镜效果
Dec 25 Javascript
jQuery隐藏和显示效果实现
Apr 06 Javascript
深入理解jQuery之防止冒泡事件
May 24 Javascript
微信小程序 MINA文件结构
Oct 17 Javascript
利用PM2部署node.js项目的方法教程
May 10 Javascript
JS实现数组去重方法总结(六种方法)
Jul 14 Javascript
JavaScript实现封闭区域布尔运算的示例代码
Jun 25 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
Sep 16 #Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
Sep 16 #Javascript
JS实现不规则TAB选项卡效果代码
Sep 16 #Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 #Javascript
jQuery实现图片轮播特效代码分享
Sep 15 #Javascript
jQuery实现的淡入淡出二级菜单效果代码
Sep 15 #Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 #Javascript
You might like
晶体管单管来复再生式收音机
2021/03/02 无线电
PHP生成UTF8文件的方法
2010/05/15 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
非常实用的php验证码类
2016/05/15 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
python基础教程之获取本机ip数据包示例
2014/02/10 Python
python 换位密码算法的实例详解
2017/07/19 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
Python 串口读写的实现方法
2019/06/12 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
自荐信的禁忌和要点
2013/10/15 职场文书
大专毕业生自我评价分享
2013/11/10 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
护理专业自荐书
2014/06/04 职场文书
先进集体申报材料
2014/12/25 职场文书
大二学年个人总结
2015/03/03 职场文书
电影开国大典观后感
2015/06/04 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书