使用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 相关文章推荐
jquery ajax 同步异步的执行示例代码
Jun 23 Javascript
表单的焦点顺序tabindex和对应enter键提交
Jan 04 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
学习JavaScript设计模式之装饰者模式
Jan 19 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
May 03 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
Mar 25 Javascript
vue 项目如何引入微信sdk接口的方法
Dec 18 Javascript
layui自定义ajax左侧三级菜单
Jul 26 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
基于javascript处理nginx请求过程详解
Jul 07 Javascript
vue 实现锚点功能操作
Aug 10 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目录导航文件代码
2006/10/09 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
PHP图片上传代码
2013/11/04 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python write无法写入文件的解决方法
2019/01/23 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
python 中xpath爬虫实例详解
2019/08/26 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python如何发送与接收大型数组
2020/08/07 Python
心理健康教育心得体会
2013/12/29 职场文书
项目管理计划书
2014/01/09 职场文书
环保口号大全
2014/06/12 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
爱护公物演讲稿
2014/09/09 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
初中美术教学反思
2016/02/17 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python