使用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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
document.onreadystatechange事件的用法分析
Oct 17 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
Nov 30 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
js showModalDialog参数的使用详解
Jan 07 Javascript
一个JavaScript获取元素当前高度的实例
Oct 29 Javascript
ECMAScript6函数默认参数
Jun 12 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
在Create React App中启用Sass和Less的方法示例
Jan 16 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 Javascript
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 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
用cookies来跟踪识别用户
2006/10/09 PHP
php数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
JavaScript类库D
2010/10/24 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
详解a++和++a的区别
2017/08/30 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
python迭代器实例简析
2014/09/25 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python中使用np.delete()的实例方法
2021/02/01 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
简历自我评价怎么写好呢?
2014/01/04 职场文书
党支部公开承诺书
2014/03/28 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
教师节表彰会主持词
2015/07/06 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python
关于JavaScript回调函数的深入理解
2021/06/27 Javascript
MYSQL如何查看进程和kill进程
2022/03/13 MySQL
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技
Spring中的@Transactional的工作原理
2022/06/05 Java/Android