使用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 相关文章推荐
爱恋千雪-US-AscII加密解密工具(网页加密)下载
Jun 06 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
Nov 02 Javascript
动感效果的TAB选项卡jquery 插件
Jul 09 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
jquery用data方法获取某个元素上的事件
Jun 23 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
Dec 27 Javascript
js实现3d悬浮效果
Feb 16 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
Jun 20 Javascript
浅谈通过JS拦截 pushState和replaceState事件
Jul 21 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
vue中activated的用法
Jan 03 Vue.js
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
Terran兵种介绍
2020/03/14 星际争霸
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
php微信开发之关注事件
2018/06/14 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
2012/11/15 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
Python中return语句用法实例分析
2015/08/04 Python
Python操作MongoDB详解及实例
2017/05/18 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
幼儿园小班教师寄语
2014/04/03 职场文书
学生请假条格式
2014/04/11 职场文书
项目经理任命书
2014/06/04 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
会议简报格式范文
2015/07/20 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js