Readonly和Disabled是用在表单中的两个属性,它们都能够做到使用户不能够更改表单域中的内容。但是它们之间有着微小的差别,总结如下: Readonly只针对input(text / password)和textarea有效,而disabled对于所有的表单元素都有效,包括select, radio, checkbox, button等。但是表单元素在使用了disabled后,当我们将表单以POST或GET的方式提交的话,这个元素的值不会被传递出去,而 readonly会将该值传递出去(这种情况出现在我们将某个表单中的textarea元素设置为disabled或readonly,但是submit button却是可以使用的)。 一般比较常用的情况是: ①在某个表单中为用户预填了某个唯一识别代码,不允许用户改动,但是在提交时需要传递该值,此时应该将它的属性设置为readonly ②经常遇到当用户正式提交了表单后需要等待管理员的信息验证,这就不允许用户再更改表单中的数据,而是只能够查看,由于disabled的作用元素范围 大,所以此时应该使用disabled,但同时应该注意的是要将submit button也disabled掉,否则只要用户按了这个按钮,如果在数据库操作页面中没有做完整性检测的话,数据库中的值就会被清除。如果说在这种情况 下用readonly来代替disabled的话,若表单中只有input(text / password)和textarea元素,那还是可以的,如果存在其他发元素,比如select,用户可以在重新改写值后按回车键进行提交(回车是默认 的submit触发按键) ③我们常常在用户按了提交按钮后,利用javas

cript将提交按钮disabled掉,这样可以防止网络条件比 较差的环境下,用户反复点提交按钮导致数据冗余地存入数据库。 disabled和readonly这两个属性有一些共同之处,比如都设为true,则form属性将不能被编辑,往往在写js代码的时候容易混合使用这 两个属性,其实他们之间是有一定区别的。 如果一个输入项的disabled设为true,则该表单输入项不能获取焦点,用户的所有操作(鼠标点击和键盘输入等)对该输入项都无效,最重要的一点是 当提交表单时,这个表单输入项将不会被提交。 而readonly只是针对文本输入框这类可以输入文本的输入项,如果设为true,用户只是不能编辑对应的文本,但是仍然可以聚焦焦点,并且在提交表单 的时候,该输入项会作为form的一项提交。 Untitled Document 小技巧: diabled:可用readonly代替,background-color:#cccccc;加上灰色背景色就可以。

另一资料:

一 先看看这两个属性在效果和使用上的区别

1 readonly是要锁定这个控件,通过在界面上无法修改他(但是通过javascript可以修改他)。

2 disabled 和readonly有相同的地方也是可以锁定这个控件用户不能改变他的值,但是disabled的更彻底一些,他是要使你完全不能使用他,包括改变他的背 景颜色(不信,你去修改一个被disabled掉的input文本框,你发现你是徒劳),如果是checkbox则不能选中他。

3所有控件都有disabled 属性,但是不一定有readonly属性。如select 下拉框

2) checkBox

3) select下拉选择框(这里只能显示disabled和非disabled的区别,因为select 没有readonly属性)

4)button按钮

说明:点击被readonly掉的按钮照样可以触发事件,但是被disabled掉的按钮就无法使用了不管上面有没有事件。

5) div

说明:将div设置disabled属性之后,整个div都灰掉了,但是文本框里面还是可以输入内容的。

注意:select下拉选择框是没有readonly属性的,为什么呢?(思考)。

二再来看看这两个属性在数据提交方面的区别

我们先来写一个测试代码:

Code

<form id="form1" runat="server">

<div>

<asp:TextBox ID="txt_Disabled" runat="server" Text="disabled"   disabled="disabled" ></asp:TextBox><br />

<asp:TextBox ID="txt_ReadOnly" runat="server" Text="ReadOnly"   ReadOnly="true"></asp:TextBox><br />

<asp:TextBox ID="txt_Normal" runat="server" Text="normal" ></asp:TextBox><br />

<asp:Button ID="btn_Test" runat="server"   Text="提交数据" />

<input type="button" name="btn_ChangeValue" value="改变readonly的值" οnclick="document.all('txt_ReadOnly').value = 'myzzb'" />

</div>

</form>

在这里,我写了一个asp表单页面,使用了get 方式提交

从提交的url可以看出被disabled的控件的值没有提交到服务器,这个时候在服务器端是获取不到这个控件的值的,

相反,被设置成readonly的文本框的值是提交到服务器的。

这里出现了一个奇怪的情况,readonly的文本框是被设置成readonly的了,但是我通过下面的按钮 "改变readonly值"

document.all('txt_ReadOnly').value = 'myzzb' 这个时候 被readonly的值显示的是myzzb了,现在我点提交数据,在服务器端获取到了值是myzzb了,但是奇怪的是,回传到页面之后,页面的 readonly控件里面还是显示的是改变myzzb之前的 Readonly的值了,这究竟是什么原因呢?

这是微软在.net2.0里面 做的小改动。如果Textbox的ReadOnly属性设置成"True",ViewState将不会被回发到服务器,虽然客户端已经更改了。但是我们依 然还是可以用TextBox.Attributes.Add("readonly","readonly") 来实现。

在服务器端去设置一 个控件的readonly 和在客户端设置一个文本框的readonly属性是有区别的。在服务器端我们用 TextBox.Attributes.Add("readonly","readonly") 页面在回传的时候,即使文本框是readonly 的,也是会改变他的值的,在客户端在2.0里面就会不会显示客户端的修改。

ps:在.net 1.1 里面 不会出现上面值还保存之前的值的情况。

大 家仔细想一下会有一个问题出现,就是有时候我们写程序的时候,比如一个购买商品的页面,我们可以在上面输入商品的数量,但是价格我们设置成只读的,最后下 面有一个总价格就是 数量 * 只读的价格,那么我们很可能就是这样做的,在后台的时候读取 商品数量的 textbox值,然后读取 价格的textbox的值,然后两者的积 作为总金额 uodate到数据库中去了,如果客户端的用户和我们一样是一个会点程序的小程序员,那么麻烦就有可能来拉,他可以查看源文件,查看到被readonly 的价格的文本框的id或者是name什么的,然后在浏览器中输入脚本去改变价格的值,然后点提交,那么这个小程序员就可以随便怎么给自己打折都不过份啊。

就想下面的列子显示的,在浏览器中输入脚本改变单价,然后在点返回就可以看到单价已经被改拉。

那么,服务器端设置设置readonly ,disabled和在客户端设置readonly,disabled的有什么不同吗?

我们现在通过在服务器端去设置这两个控件,代码如下:

我们将表单的提交方法设置成get提交,我们就可以在url里面看到提交的内容,发现被设置成disabled的控件没有提交到服务器,readonly的提交数据到服务器了,如下图所示:

这说明和客户端的效果是一样的。

通过以上的测试说明以下几点:

1,客户端设置readonly,disabled和服务器端设置readonly效果一样。

2,readonly的数据是可以提交到服务器的,disabled的数据是不可以提交到服务器的。

3,在.net1.1里面设置成readonly的textbox 在客户端改变之后。服务器是会回传用js改变的值,在.net 2.0里面是不可以回传到客户端,除非你在服务器端设置他的readonly属性(这个时候就和1.1效果一样)。

4,设置成readonly的TextBox在客户端修改数据会提交到服务器,那么作为程序员的你,千万不要update的时候也把这个值修改,如果你是购物网站这么做的话,那么你完蛋了。

5,在服务器端用txtBox.enabled = false;在客户端解析的时候会给TextBox加上diabaled也就是说,数据不能提交到服务器的。

从提交的url可以看出被disabled的控件的值没有提交到服务器,这个时候在服务器端是获取不到这个控件的值的,

相反,被设置成readonly的文本框的值是提交到服务器的。

各种控件disabled和readonly之后的显示和操作区别:

1) input TextBox

Code

protected void Page_Load(object sender, EventArgs e)

{

//在服务器端给控件加上readonly 和 disabled属性

txt_ReadOnly.Attributes.Add("readonly", "readonly");

txt_Distabled.Attributes.Add("disabled", "disabled");

}

本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/940697,如需转载请自行联系原作者

readonly和disabled的区别相关推荐

  1. 【转载】表单中 Readonly 和 Disabled 的区别

    今天写代码,遇到表单提交的问题,某个字段在不同的情况下,要传递不同的值进行赋值,试过一些方法都有些问题,后来请教前端同学,使用 disabled 这个属性终于搞定了问题,查到一篇讲解 readonly ...

  2. html中 readonly和disabled的区别

    要说readonly和disabled的区别,就需要先说说两者的联系: 两个属性都可以作用于input等表单元素上,都使得元素成为"不可用"的状态: 两者的字面意义先介绍一下: r ...

  3. 表单中Readonly和Disabled的区别

    Readonly和Disabled是用在表单中的两个属性,它们都能够做到使用户不能够更改表单域中的内容.但是它们之间有着微小的差别,总结如下: Readonly只针对input(text / pass ...

  4. css readonly和disabled的区别

    一.两者的联系 1.两个属性都可以作用于input等表单元素上,都使得元素成为"不可用"的状态: 2.两者的字面意义: (1)readonly表示"只读",一般 ...

  5. readonly和disabled的区别!

    Readonly只针对input(text / password)和textarea有效 Disabled对于所有的表单元素都有效 readonly接受值更改可以回传,disable接受改但不回传数据 ...

  6. struts2 标签中read-only=true 和disabled的区别

    struts2 标签中read-only=true 和disabled的区别 都不能对内容进行修改,区别在readonly提交的时候还会有该字段,但是disabled会在提交的时候忽略该字段 转载于: ...

  7. readonly与disabled属性在css中区别

    论readonly与disabled在css中区别 之前在项目中遇到的一个问题,现在想把它记录下来. 当项目需求上需要在文本框中禁用输入某个值的时候,我第一个反应是用了disabled,因为之前一直接 ...

  8. html 取消只读属性,浅谈html中input只读属性readonly和disable的区别

    Readonly和Disabled它们都能够做到使用户不能够更改表单域中的内容.但是它们之间有着微小的差别,总结如下: Readonly只针对input(text / password)和textar ...

  9. readonly 和 disable的区别

    Readonly和Disabled它们都能够做到使用户不能够更改表单域中的内容.但是它们之间有着微小的差别,总结如下: Readonly只针对input(text / password)和textar ...

最新文章

  1. Matlab与线性代数 -- 矩阵的重组3
  2. Python爬取B站5000条视频,揭秘为何千万人为它流泪
  3. 常考数据结构与算法:异或操作
  4. 汇编语言——正数数组P和负数数组N
  5. Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。
  6. Planning Strategy 和Requirement type的思考
  7. LeetCode 1135. 最低成本联通所有城市(最小生成树+排序+并查集)
  8. Nodejs是什么?
  9. html调用js函数_使用Require.js实现模块化开发
  10. MySQL学习笔记(七)使用AutoMySQLBackup工具自动备份MySQL数据库
  11. python 通信中间件_Python Web框架Sanic middleware – 中间件
  12. 设置和获取函数体现的软件工程
  13. xp系统telnet服务器,xp电脑telnet服务器
  14. 研究生学习生活日记——未来三年的规划
  15. 裸金属服务器能降级虚拟机不,裸金属服务器属于虚拟机吗
  16. 奥林匹克徽标设计大全(1924-2012)
  17. js实现点击上一题和下一题出现对应的题目,
  18. 我要偷偷的学Python,然后惊呆所有人(第二天)
  19. 软件测试前景怎么样?大概要学什么?
  20. win10远程桌面连接计算机密码错误,访问win10的远程桌面(Remote Desktop)总是凭据或者用户密码错误...

热门文章

  1. 面试思考,入职初期怎么做
  2. 针对敲诈病毒(WanaCrypt0r2.0)的应对方案
  3. 如何安装与连接MySQL?
  4. 每日Ubuntu小技巧 - 在Ubuntu上面安装VMware Workstation
  5. adt 22.6出现的问题
  6. 为CIO而准备的技术
  7. sql如何遍历几百万的表_SQl SERVER 2000 遍历表中数据的方法
  8. 查询成绩最好的前两名_SQL查询整理
  9. 微信公众帐号开发教程第9篇-QQ表情的发送与接收
  10. maven自定义本地仓库目录