共计 1127 个字符,预计需要花费 3 分钟才能阅读完成。
最近在写 demo 的时候遇到一个问题:表单内输入框的值没传到后盾,后盾拿到的数据是 null,通过排查,发现起因是我为了使输入框的内容不被用户批改而应用了 disabled 属性,就导致 input 的 value 没有传出,因而后盾没拿到导致的 null;因而记录一下(心态崩了呀 …)
readonly 和 disabled 的区别
Readonly 和 Disabled 它们都可能做到使用户不可能更改表单域中的内容。然而它们之间有着渺小的差异,总结如下:
Readonly 只针对 input(text / password) 和 textarea 无效,而 disabled 对于所有的表单元素都无效,然而表单元素在应用了 disabled 后,当咱们将表单以 POST 或 GET 的形式提交的话,这个元素的值不会被传递进来,而 readonly 会将该值传递进来(readonly 承受值更改能够回传,disable 承受改但不回传数据)。
个别比拟罕用的状况是:
在某个表单中为用户预填了某个惟一辨认代码,不容许用户改变,然而在提交时须要传递该值,此时应该将它的属性设置为 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 的一项提交。