使用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 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
Jan 15 Javascript
基于prototype扩展的JavaScript常用函数库
Nov 30 Javascript
js onload事件不起作用示例分析
Oct 09 Javascript
从js向Action传中文参数出现乱码问题的解决方法
Dec 29 Javascript
javascript实现复制与粘贴操作实例
Oct 16 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
Jun 29 Javascript
javascript瀑布流布局实现方法详解
Feb 17 Javascript
jquery实现下拉框多选方法介绍
Jan 03 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
Aug 07 Javascript
mpvue小程序循环动画开启暂停的实现方法
May 15 Javascript
js+css实现扇形导航效果
Aug 18 Javascript
Vue中inheritAttrs的使用实例详解
Dec 31 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
PHP面向对象编程快速入门
2006/12/14 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
jQuery 选择器理解
2010/03/16 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
python 简单的绘图工具turtle使用详解
2017/06/21 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
pygame实现简易飞机大战
2018/09/11 Python
python和JavaScript哪个容易上手
2020/06/23 Python
python中取绝对值简单方法总结
2020/07/24 Python
python Xpath语法的使用
2020/11/26 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
你常见到的runtime exception
2016/09/05 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
简短大学毕业感言
2014/01/18 职场文书
护士长竞聘书
2014/03/31 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
队名及霸气口号大全
2015/12/25 职场文书
Python采集壁纸并实现炫轮播
2022/04/30 Python