html - 表单之外的按钮 html 标签是否有效?

标签 html forms button

我刚刚注意到,在 soundcloud 中,轨道上的“操作”按钮(例如,重新发布等...)都是 html 按钮标签。此外,它们既不在表单内,也不绑定(bind)到 la html5 表单,也不提交表单(它们显然是通过 javascript 处理的)。这是有效的 HTML 吗?按钮可以没有表单吗?或者这只是让这些按钮成为简单的可点击 div?这对屏幕阅读器来说有多有效/无效?

最佳答案

button 元素在文档正文中可能出现文本级标记的任何位置都是有效的。这样的元素不需要与 form 元素有任何关系。目前权威的引用是HTML 4.01 specification ,正式规则在 DTD 中,但您可以走捷径并使用 W3C Markup Validator检查文档是否有效。

当不与表单关联时,button 元素与 span 元素(而不是 div,它是 block -level 默认),但是 button 有特殊的默认渲染。浏览器和辅助软件可能也将 button 视为特殊的,最安全的做法是仅对应该触发某些操作的元素使用 button单击时。相反,此类元素通常最好使用 button 标记来表示,尽管您也可以通过其他方式(主要是图像或 CSS)创建视觉上类似按钮的元素。

在表单之外,button 元素默认有 type=button(这通常是它唯一合理的 type)。这意味着它只能通过 JavaScript 产生效果。这不会以任何方式使其无效。但是,您可以考虑通过 JavaScript 生成此类按钮,而不是将它们作为静态 HTML 内容,这样当脚本被禁用时,就不会出现什么都不做的(有效但)令人困惑的按钮。

解决以下评论中的澄清问题:

button type=button 元素类似于input type=button;不同之处在于后者没有内容,而是从 value 属性中获取按钮中显示的文本,而 button 具有可以“丰富”的内容(带有标记) .

对于任一元素,如果使用它们会导致服务器操作(通常通过 Ajax 调用),那么我们确实可以询问页面如何在禁用 JavaScript 的情况下工作。但这个问题可能无关紧要(也许该页面是一个无论如何都应该使用 JavaScript 运行的应用程序),并且无论如何正式这个想法都没有错。

它们为什么存在?为了作者的方便和遗留原因,我会说。同样,有人可能会问为什么 HTML 根本没有事件属性,如果没有客户端脚本它们就不可能工作,并且您可以将事件处理程序分配给 JavaScript 中的元素。但在早期,这是不可能的,即使是现在,使用 button 元素或 onclick 属性可能比在 JavaScript 中做事更方便(以及,为了让元素看起来像一个按钮,CSS)。还有一点是 buttoninput type=button 为元素创建了依赖于浏览器的外观,对于大多数用户来说,任何具有他浏览器的默认按钮样式被视为按钮。

关于html - 表单之外的按钮 html 标签是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461658/

相关文章:

button - 如何在 flutter 中对齐按钮中的文本?

javascript - Vue.js 方法还是单独的 js 文件?

html - CSS 下载字体在 Firefox ("Content Blocked Source"中被阻止)

javascript - Safari 11.1 : ajax/XHR form submission fails when input[type=file] is empty

php - 在同一页面上输出的简单 html/php 表单

android - 如何在 Android 中通过单击按钮展开和隐藏 ScrollView

iphone - UIAlertView 多个带有文本的按钮

html - 并排显示单选按钮

html - Div 表中的卡住列

javascript - 表单提交事件上的 ajax POST 无法正常工作