type ="hidden"与隐藏属性之间的差异

r12*_*r12 8 html

我注意到在我的网页应用程序中使用了两种模式,我不记得他们是如何到达那里的.

一个人传递令牌<input ... type="hidden" />,其他部分使用<input ... hidden />.

我查看了MDN页面的属性type =,它们看起来完全相同.

我转到了这个问题,它似乎表明该hidden属性会隐藏显示,但不会隐藏其他用户输出方法(如屏幕阅读器).但它没有说明使用的任何内容type="hidden".

这个问题谈论显示和type="hidden",但没有提到其他类型的用户输出方法.

不同输出设备对这两种处理方式有何不同?表格如何处理不同?他们对DOM或DOM的东西有不同的对待吗?

这两者之间是否存在某些功能差异?是否有一些"最佳实践"的区别?一些"预期的方式做到这一点"的区别?

Mik*_*nen 5

当您有标记时,例如<input hidden>它实际上是一个快捷方式,<input hidden="hidden">其明显不同于<input type="hidden">.

属性的文档hidden将其描述为与属性基本相同,style="display:none"但没有明确说明,以允许支持属性hidden但不支持 CSS 的理论用户代理 (UA)。至少在理论上,当阻止属性工作时,属性hidden也可以工作,但据我所知,这个细节没有在任何地方定义。Content-Security-Policystyle

用属性隐藏的元素hidden="hidden"仍然可以提交,因为上面的文档明确指出

隐藏元素不应与非隐藏元素链接,并且隐藏元素的后代元素仍然处于活动状态,这意味着脚本元素仍然可以执行,表单元素仍然可以提交。然而,元素和脚本可能引用隐藏在其他上下文中的元素。

现实世界的用户代理(例如 Firefox 和 Chrome)可能不会发送具有有效 CSS 样式的输入display:none,但这实际上并不是文档描述的行为。

inputtype属性值hidden的文档明确指出,具有此属性的输入将针对该表单元素提交,但用户无法修改或查看。(但是,这不能用于避免进行服务器端安全检查,因为用户仍然可以使用例如开发人员工具来检查或修改该值。)

TL;DR:type="hidden"如果您想提交隐藏的表单元素和hidden="hidden"/或 CSS 样式(如果您只想向访问者隐藏该元素),则应该使用。区别更多的是语义上的而不是实际的,但type="hidden"真正老的用户代理可以更好地支持。


Emm*_*dey 0

另外,在某些浏览器中,使用属性“hidden”会限制属性“value”pe 中的输入内容,在 iOS 版 chrome 中,此限制设置为 500ko。另一个区别是“隐藏”属性并不像今天那样 100% 支持。