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

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 触发按键)。

  • 我们常常在用户按了提交按钮后,利用 javascript 将提交按钮 disabled 掉,这样可以防止网络条件比较差的环境下,用户反复点提交按钮导致数据冗余地存入数据库。

disabled 和 readonly 这两个属性有一些共同之处,比如都设为 true,则 form 属性将不能被编辑,往往在写 js 代码的时候容易混合使用这两个属性,其实他们之间是有一定区别的。

如果一个输入项的 disabled 设为 true,则该表单输入项不能获取焦点,用户的所有操作(鼠标点击和键盘输入等)对该输入项都无效,最重要的一点是当提交表单时,这个表单输入项将不会被提交。

而 readonly 只是针对文本输入框这类可以输入文本的输入项,如果设为 true,用户只是不能编辑对应的文本,但是仍然可以聚焦焦点,并且在提交表单的时候,该输入项会作为 form 的一项提交。

小技巧:diabled 可用 readonly 代替,background-color:#cccccc; 加上灰色背景色就可以。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>  

<body>
<form id="form1" name="form1" method="get" action="">
  <input name="q1" type="text" id="q1" value="readonly" readonly="true" />
  <input name="q2" type="text" disabled="disabled" id="q2" value="disabled" />
  <input type="submit" name="Submit" value="Submit" />
</form>
</body>
</html> 

input 的字段当为 diabled 时时无法获取数值得,所以最近不要用这个,我们可以用 readonly 带替代,即可解决这类问题。

<input name="nowamagic" id="nowamagic" size="12" value="disabled" disabled="disabled">

放在 form 表单中提交后得不到该值。

将 disabled="disabled" 改为 readonly = "readonly" 即可 , 按照 W3C 的规范:http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12

设置为 disabled 的 input 将会有下面的限制:

  • 不能接收焦点
  • 使用 tab 键时将被跳过
  • 可能不是 successful 的

设置为 readonly 的 input 将会有下面的限制:

  • 可以接收焦点但不能被修改
  • 可以使用 tab 键进行导航
  • 可能是 successful 的

只有 successful 的表单元素才是有效数据,也即是可以进行提交。disabled 和 readonly 的文本输入框只能通过脚本进行修改 value 属性。

这两个属性在效果和使用上的区别:

  1. readonly 是要锁定这个控件,通过在界面上无法修改他(但是通过 javascript 可以修改他)。
  2. disabled 和 readonly 有相同的地方也是可以锁定这个控件用户不能改变他的值,但是 disabled 的更彻底一些,他是要使你完全不能使用他,包括改变他的背景颜色(不信,你去修改一个被 disabled 掉的 input 文本框,你发现你是徒劳),如果是 checkbox 则不能选中他。
  3. 所有控件都有 disabled 属性,但是不一定有 readonly 属性,如 select 下拉框。点击被 readonly 掉的按钮照样可以触发事件,但是被 disabled 掉的按钮就无法使用了不管上面有没有事件。

将 div 设置 disabled 属性之后,整个 div 都灰掉了,但是文本框里面还是可以输入内容的。注意:select 下拉选择框是没有 readonly 属性的

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

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

关于用 js 控制 disabled 和 readonly 的问题,下面是一段参考代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> 

<body>
<form enctype="multipart/form-data" action="sign.php" method="post" name="moblie_act_form" id="moblie_act_form" >
<input type="text"  class="input" id="mobile" name="mobile" value="{$mobile}"  readonly="true" disabled="disabled">
<input type="button" value="修改" onClick="modify_phone()">
</form>
</html>
<script language="javascript">
function modify_phone(){
    if(confirm("您确定要修改您的手机号码吗?")){
        document.moblie_act_form.mobile.readOnly = false;
        document.moblie_act_form.mobile.disabled = false;
    }
    return true;
}
</script>
</body>
</html> 

参考:

表单中 Readonly 和 Disabled 的区别

【转载】表单中 Readonly 和 Disabled 的区别的更多相关文章

  1. 转:表单中Readonly和Disabled的区别(HTML中使用javascript解除禁止input输入框代)

    转:表单中Readonly和Disabled的区别 参考资料: disabled和readonly区别: 参考博文1地址:http://blog.csdn.net/symgdwyh/article/d ...

  2. 表单中Readonly和Disabled的区别(转载)

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

  3. 表单中Readonly和Disabled的区别(转)

    今天做form提交的时候,用到了disabled,form提交的时候怎么获取都是null,后来用hidden解决了这个问题,但是考虑到为什么,最后找到了原因,转载一篇文章,说明一下 原文:http:/ ...

  4. 表单中Readonly和Disabled的区别:readonly在get和post可传值到后端,disabled不可

    http://www.nowamagic.net/html/html_ReadonlyAndDisabled.php Readonly和Disabled是用在表单中的两个属性,它们都能够做到使用户不能 ...

  5. 表单中Readonly和Disabled的区别

    1.readonly是要锁定这个控件,通过在界面上无法修改他(但是通过javascript可以修改他). 2.disabled和readonly有相同的地方也是可以锁定这个控件用户不能改变他的值,但是 ...

  6. 关于表单中Readonly和Disabled

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

  7. Readonly和disabled的区别 display:none和visible:hidden的区别

    怎样使input中的内容为只读,也就是说不让用户更改里面的内容. <input type="text" name="input1" value=" ...

  8. web基础----->readonly与disabled的区别

    readonly和Disabled是用在表单中的两个属性,它们都能够做到使用户不能够更改表单域中的内容.但是它们之间有着微小的差别,今天我们通过案例来学习一下. readonly和Disabled的区 ...

  9. css readonly和disabled的区别

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

随机推荐

  1. H5总结

    1.新增的语义化标签: <nav>: 导航 <header>: 页眉 <footer>: 页脚 <section>:区块 <article> ...

  2. (区间dp 或 记忆化搜素 )Brackets -- POJ -- 2955

    http://poj.org/problem?id=2955 Description We give the following inductive definition of a “regular ...

  3. 你可能不知道的Shell

    Shell也叫做命令行界面,它是*nix操作系统下用户和计算机的交互界面.Shell这个词是指操作系统中提供访问内核服务的程序. 这篇文章向大家介绍Shell一些非广为人知.但却实用有趣的知识,权当品 ...

  4. Java案例:超市库存管理系统

    案例介绍: 模拟真实的库存管理逻辑,完成超市管理系统的日常功能实现,见下图 案例需求分析: 根据案例介绍,我们进行分析,首先需要一个功能菜单,然后输入功能序号后,调用序号对应的功能方法,实现想要的操作 ...

  5. EL表达式总结

    EL表达式是在JSP中使用的 EL表达式的作用:简化jsp文件中的<% %>. [EL的概述] 什么是EL: 为什么学习EL: * 简化JSP的代码,而且减少<%%> 使用EL ...

  6. PAT甲级 1121. Damn Single (25)

    1121. Damn Single (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue "Dam ...

  7. ASP.NET MVC ActionMethodSelectorAttribute 以及HttpGet等Action特性

    一.ActionMethodSelectorAttribute 其是一个抽象类,继承自Attribute,子类有NonActionAttribute.HttpGetAttribute.HttpPost ...

  8. 2.select查询用法

    1.定义查询接口 UserMapper.java package tk.mybatis.simple.mapper; import tk.mybatis.simple.model.SysRole; i ...

  9. ZKWeb网页框架1.5正式发布

    本次更新的内容有 明显的改进了IoC容器在部分情况下的性能, 当前的性能和Grace, DryIoC同等 添加IHttpResquestHandlerWrapper接口让重载Http上下文更容易 添加 ...

  10. Linux启动流程与模块管理(15)

    系统的启动其实是一项非常复杂的过程,因为内核得要检测硬件并加载适当的驱动程序,接下来则必须要调用程序来准备好系统运行的环境,以让用户能够顺利的操作整台主机系统,如果你能够理解系统启动的原理,那么将有助 ...