Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[html] 第21天 谈谈你对input元素中readonly和disabled属性的理解 #70

Open
haizhilin2013 opened this issue May 6, 2019 · 21 comments
Labels
html html

Comments

@haizhilin2013
Copy link
Collaborator

第21天 谈谈你对input元素中readonly和disabled属性的理解

@haizhilin2013 haizhilin2013 added the html html label May 6, 2019
@yxkhaha
Copy link

yxkhaha commented May 7, 2019

  • 相同点:都会使文本框变成只读,不可编辑。
  • 不同点:
    1.disabled属性在将input文本框变成只读不可编辑的同时,还会使文本框变灰,但是readonly不会。
    2.disabled属性修饰后的文本框内容,在不可编辑的同时,通过js也是获取不到的。但是用readonly修饰后的文本框内容,是可以通过js获取到的,也就只是简单的不可编辑而已!
    3.disabled属性对input文本框,单选radio,多选checkbox都适用,但是readonly就不适用,用它修饰后的单选以及多选按钮仍然是可以编辑状态的。

@github-linong
Copy link

image

获取不到是指? @yxkhaha

@tzjoke
Copy link

tzjoke commented May 29, 2019

disabled 不能focus,submit的时候也不会把这个值包括进来
Angular 中使用响应式表单的时候如果有控件disabled了,form.getValue()并不会包括disabled控件的值,得使用form.getRawValue()

@AricZhu
Copy link

AricZhu commented Jul 6, 2019

相同点:
都会变灰,并且不可编辑
不同点:
disabled以后,无法获取值,而readonly以后,还是可以获取值的。

@Konata9
Copy link

Konata9 commented Aug 5, 2019

总结了前面老哥们的回答,再加上自己查了一下。

在表现上 readonlydisabled 都不能让用户对 input 进行编辑。但从含义上两者还是有较大的差别的。

readonly 直译为 “只读”,一般用于只允许用户填写一次的信息,提交过一次之后,就不允许再次修改了。

disabled 直译为 “禁用”,即这个 input 就是不允许填写和使用的(可能是因为权限或者其他原因)。

因此在外观上,readonly 与普通 input 无异,只是点击后无法进行编辑;而 disabledinput 呈灰色,也不允许点击。从这两点其实也可以看出,对于 input 的事件,readonly 会响应,而 disabled 是不响应的。并且在传输数据上,disabled 的数据是不会被获取和上传,readonly 的数据会被获取和上传。

@seho-dev
Copy link

seho-dev commented Aug 6, 2019

看了楼上几位答案,disabled明可以获取呀,你们是不能获取指的是什么?这样些不对吗?
console.log(document.getElementById("in").value);

可以获取的

<script src="src/index.js"> </script>

@funlee
Copy link

funlee commented Sep 19, 2019

看了楼上几位答案,disabled明可以获取呀,你们是不能获取指的是什么?这样些不对吗?
console.log(document.getElementById("in").value);

可以获取的

<script src="src/index.js"> </script>

我试了试,也是可以获取的,不晓得为什么说不能获取

@yyz841875845
Copy link

相同点:
都会变灰,并且不可编辑
不同点:
disabled以后,无法获取值,而readonly以后,还是可以获取值的。

readonly 不会变灰吧

@vinceok
Copy link

vinceok commented Jan 16, 2020

相同点:都会使表单变成不可编辑状态

不同点:

  1. readonly是只读(可能是某种特殊处理),disabled是禁用(可能是权限或其他原因),意义不同
  2. disabled会使文本框变灰,readonly不会
  3. disabled对所有表单都使用,readonly对hidden、radio、checkbox、range、color无效
  4. disabled的值不会被form收集,readonly的值会

@rennzhang
Copy link

readonly

把表单的属性设置为只读

只读字段是不能修改的。不过,用户仍然可以使用 tab 键切换到该字段,还可以选中或拷贝其文本。

readonly 属性可以防止用户对值进行修改,直到满足某些条件为止(比如选中了一个复选框)。然后,需要使用 JavaScript 消除 readonly 值,将输入字段切换到可编辑状态。

disabled

禁用某个表单

被禁用的 input 元素既不可用,也不可点击。可以设置 disabled 属性,直到满足某些其他的条件为止(比如选择了一个复选框等等)。然后,就需要通过 JavaScript 来删除 disabled 值,将 input 元素的值切换为可用。

不同点

  1. 生效范围不同

    • readonly只对可输入的表单有效
    • disabled对所有表单生效
  2. 效果不同

    • readonly设置只读,可以获取焦点
    • disabled直接阻止表单的一切操作
  3. 提交不同

    • readonly可以正常提交
    • disabled会忽略提交

来和我一起刷3+1吧
gitHub: https://github.com/Renato-Z/exercises/blob/master/history.md

@qiqingfu
Copy link

qiqingfu commented Jun 4, 2020

disabled:
这个布尔属性表示此表单控件不可用。 特别是在禁用的控件中, click 事件 将不会被分发 。 并且,禁用的控件的值在提交表单时也不会被提交。如果 type 属性为 hidden,此属性将被忽略。

readonly:
这个布尔属性用于指明用户无法修改控件的值。
HTML5 如果控件的 type 属性为hidden, range, color, checkbox, radio, file 或 type时,此属性会被忽略。

@blueRoach
Copy link

两者都会使input无法编辑

readonly

  • 样式与正常无异
  • 可以复制文本
  • 可以获取焦点
  • 可以正常提交

disabled

  • 样式置灰
  • 不可复制文本
  • 无法获取焦点
  • 无法正常提交

@CoderLeiShuo
Copy link

  • 相同点:都会使文本框变成只读,不可编辑

  • 不同点:

    • disabled属性在将input文本框变成只读不可编辑的同时,还会使文本框变灰,但是readonly不会。例如:左侧的input文本框设置了readonly属性,右侧的input文本框设置了disabled属性

    image-20200728153936155

    • 设置了readonly属性的input元素依然可以获取焦点,但是设置了disabled属性的input元素没有办法获取焦点。

    image-20200728154353112

    • readonly只针对inputtextarea有效,而disabled对于所有的表单元素都有效。

    image-20200728155622153

  • 常用情况:

    • 在某个表单中为用户预先填写了某个内容,不允许用户改动,但是在提交时需要传递该值,此时应该将它的属性设置为readonly
    • 常常在用户按了提交按钮后,利用JavaScript将提交按钮禁用掉,可以防止用户反复点击按钮,多次提交。
  • 总结:

    • readonly:不可编辑、可复制、可选择、可以接收焦点但不能被修改,后台会接收到传值
    • disabled:不可编辑、不可复制、不可选择、不能接收焦点,后台也不会接收到传值

@smallwebbird
Copy link

@funlee 应该指的是提交的时候,disabled修饰的input的值会被忽略

@MrZ2019
Copy link

MrZ2019 commented Sep 21, 2020

相同点:都会使文本框变成只读,不可编辑。
不同点:
1.disabled属性在将input文本框变成只读不可编辑的同时,还会使文本框变灰,但是readonly不会。
2.disabled属性修饰后的文本框内容,在不可编辑的同时,通过js也是获取不到的。但是用readonly修饰后的文本框内容,是可以通过js获取到的,也就只是简单的不可编辑而已!
3.disabled属性对input文本框,单选radio,多选checkbox都适用,但是readonly就不适用,用它修饰后的单选以及多选按钮仍然是可以编辑状态的。

@cool-delete
Copy link

cool-delete commented Sep 21, 2020

@MrZ2019

相同点:都会使文本框变成只读,不可编辑。
不同点:
1.disabled属性在将input文本框变成只读不可编辑的同时,还会使文本框变灰,但是readonly不会。
2.disabled属性修饰后的文本框内容,在不可编辑的同时,通过js也是获取不到的。但是用readonly修饰后的文本框内容,是可以通过js获取到的,也就只是简单的不可编辑而已!
3.disabled属性对input文本框,单选radio,多选checkbox都适用,但是readonly就不适用,用它修饰后的单选以及多选按钮仍然是可以编辑状态的。

复制一遍有什么意义?

@zxcdsaqwe123
Copy link

readonly:只读 能选中input框
disabled:禁用 不能选中

@amikly
Copy link

amikly commented Nov 9, 2021

readonly属性

这个布尔属性用于指明用户无法修改控件的值。

HTML5中如果控件的 type 属性为hidden, range, color, checkbox, radio, file 或 type时,此属性会被忽略。

disabled 属性

这个布尔属性表示此表单控件不可用。 特别是在禁用的控件中, click 事件将不会被分发 。

并且,禁用的控件的值在提交表单时也不会被提交。如果 type 属性为 hidden,此属性将被忽略。

@Iambecauseyouare
Copy link

两个属性都会使文本框变成只读的,不可编辑
不同之处:
1.disabled属性在将input文本框变成只读不可编辑的同时,还会使文本框变灰,但是readonly不会
2.disabled属性修饰后的文本框内容,在不可编辑的同时,通过js也是获取不到的,但是readonly修饰后的文本框内容,是可以通过js获取到的,也就只是简单的不可编辑而已
3.disabled属性对input文本框,单选redio,多选checkbox都适用,但是readonly就不适用,用它修饰后的单选以及多选按钮仍然是可以编辑状态的

@CoderLeiShuo
Copy link

CoderLeiShuo commented Mar 6, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
html html
Projects
None yet
Development

No branches or pull requests