使用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 相关文章推荐
PJBlog插件 防刷新的在线播放器
Oct 25 Javascript
jquery cookie插件代码类
May 26 Javascript
基于jquery的无缝循环新闻列表插件
Mar 07 Javascript
jsPDF导出pdf示例
May 02 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
Oct 25 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
Jun 24 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
Oct 05 Javascript
使用Promise链式调用解决多个异步回调的问题
Jan 15 Javascript
jQuery选择器之表单元素选择器详解
Sep 19 jQuery
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
vue项目中使用rem,在入口文件添加内容操作
Nov 11 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
php自动获取目录下的模板的代码
2010/08/08 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
javascript 一些用法小结
2009/09/11 Javascript
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
Python中的ceil()方法使用教程
2015/05/14 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
python实现代码统计程序
2019/09/19 Python
python银行系统实现源码
2019/10/25 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
什么是java序列化,如何实现java序列化
2012/11/14 面试题
上海方立数码笔试题
2013/10/18 面试题
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
2014年超市工作总结
2014/11/19 职场文书
成绩单评语
2015/01/04 职场文书
观后感的写法
2015/06/19 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
MySQL学习之基础操作总结
2022/03/19 MySQL
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript