使用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 相关文章推荐
js与jquery中获取当前鼠标的x、y坐标位置的代码
May 23 Javascript
微信JS接口汇总及使用详解
Jan 09 Javascript
jQuery实现的简洁下拉菜单导航效果代码
Aug 26 Javascript
一步步教大家编写酷炫的导航栏js+css实现
Mar 14 Javascript
详解AngularJS 模态对话框
Apr 07 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
Feb 22 Javascript
JavaScript中变量提升与函数提升经典实例分析
Jul 26 Javascript
React Router V4使用指南(精讲)
Sep 17 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
Oct 12 Javascript
详解JQuery基础动画操作
Apr 12 jQuery
vue列表单项展开收缩功能之this.$refs的详解
May 05 Javascript
小程序实现tab标签页
Nov 16 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
python对字典进行排序实例
2014/09/25 Python
Python使用MONGODB入门实例
2015/05/11 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
python实现狄克斯特拉算法
2019/01/17 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
django自带调试服务器的使用详解
2019/08/29 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
Python进行统计建模
2020/08/10 Python
创业计划书模版
2014/02/05 职场文书
管理失职检讨书
2014/02/12 职场文书
供货协议书
2014/04/22 职场文书
求职信的正确写法
2014/07/10 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
centos7安装mysql5.7经验记录
2022/05/02 Servers