我注意到在我的网页应用程序中使用了两种模式,我不记得他们是如何到达那里的.
一个人传递令牌<input ... type="hidden" />,其他部分使用<input ... hidden />.
我查看了MDN页面的属性和type =,它们看起来完全相同.
我转到了这个问题,它似乎表明该hidden属性会隐藏显示,但不会隐藏其他用户输出方法(如屏幕阅读器).但它没有说明使用的任何内容type="hidden".
这个问题谈论显示和type="hidden",但没有提到其他类型的用户输出方法.
不同输出设备对这两种处理方式有何不同?表格如何处理不同?他们对DOM或DOM的东西有不同的对待吗?
这两者之间是否存在某些功能差异?是否有一些"最佳实践"的区别?一些"预期的方式做到这一点"的区别?
当您有标记时,例如<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"真正老的用户代理可以更好地支持。