我刚刚注意到,SoundCloud 上的音轨“操作”按钮(例如喜欢、转发等)都是 HTML button 标签。此外,它们既不在表单内,也没有绑定到表单上(类似于HTML5),也不会提交表单(它们显然是通过 JavaScript 处理的)。这是有效的 HTML 吗?一个按钮可以存在而没有表单吗?或者这些按钮只是普通可点击的 div 元素?对于屏幕阅读器来说,这个做法有效/无效?
我刚刚注意到,SoundCloud 上的音轨“操作”按钮(例如喜欢、转发等)都是 HTML button 标签。此外,它们既不在表单内,也没有绑定到表单上(类似于HTML5),也不会提交表单(它们显然是通过 JavaScript 处理的)。这是有效的 HTML 吗?一个按钮可以存在而没有表单吗?或者这些按钮只是普通可点击的 div 元素?对于屏幕阅读器来说,这个做法有效/无效?
button
元素可以出现在任何文本级标记允许出现的文档主体位置,该元素不需要与 form
元素有任何关联。目前权威参考是 HTML 4.01 规范,正式规则位于 DTD 中,但您可以使用 W3C 标记验证器 快捷地检查文档是否有效。button
元素没有与表单相关联时,它与 span
元素并没有太大的区别(默认情况下为块级),但是 button
具有特殊的默认呈现方式。浏览器和辅助软件也可能将 button
视为特殊元素,因此最安全的做法是只将 button
用于应该在单击时触发某些操作的元素。相反,这种元素通常最好使用 button
标记来表示,尽管您也可以通过其他方式创建外观类似按钮的元素(主要是图像或 CSS)。button
元素的默认类型为 type=button
(在这种情况下通常只有这种类型才是明智的)。这意味着它只能通过 JavaScript 生效。这并不会使其无效。但是,您可以考虑通过 JavaScript 生成此类按钮,而不是将它们作为静态 HTML 内容存在,以便在禁用脚本时,不会有一个(有效的,但)令人困惑的不起作用的按钮。button type=button
元素类似于 input type=button
;区别在于后者没有内容,但从 value
属性中获取显示在按钮上的文本,而 button
的内容可以是“丰富”的(带有标记)。无论使用哪个元素,如果它们会导致服务器执行操作(通常通过 Ajax 调用),那么我们确实可以询问在禁用 JavaScript 的情况下页面如何工作。但这个问题可能是不相关的(也许该页面本来就是应该运行 JavaScript 的应用程序),而且从正式上讲,这个想法并没有任何错误之处。button
元素或 onclick
属性比在 JavaScript 中完成任务(以及使用 CSS 将元素呈现为按钮)可能更加方便。此外,button
和 input type=button
会为元素创建与浏览器相关的外观,可以认为对于大多数用户,所有具有其默认按钮样式的样式都被视为按钮。type=button
的情况下提交表单,即使你将按钮放在表单外面:https://dev59.com/_XE85IYBdhLWcg3wVh84 - Ciro Santilli OurBigBook.com在ajax时代,大多数输入不仅通过提交表单发送。而且大多数按钮只是用于在单击时执行操作,同时使用可识别的小部件。此元素可用于以下上下文:
需要使用短语内容的地方。