表单外的按钮html标记有效吗?

我刚刚注意到,在soundcloud中,曲目上的“动作”按钮(比如,repost等等)都是html按钮标签。此外,它们既不在表单中,也不绑定到表单,即html5,也不提交表单(它们显然是通过javascript处理的)。这是有效的HTML吗?没有表单按钮是否可以存在?或者这只是使这些按钮成为可点击的div?对于屏幕阅读器来说,这有多有效/不有效

按钮元素在文档正文中可能出现文本级标记的任何位置都有效。这样的元素不需要与表单元素有任何关系。当前权威参考是HTML4.01规范,正式规则在DTD中,但是您可以使用快捷方式并使用W3C标记验证程序来检查文档是否有效

当不与表单关联时,按钮元素与span元素(而不是默认为块级的div)没有太大区别,但是按钮具有特殊的默认呈现。浏览器和辅助软件可能也会将按钮视为特殊的按钮,并且最安全的做法是仅将按钮用于在单击时应触发某些操作的元素。相反,这些元素通常最好使用按钮标记来表示,尽管您也可以通过其他方式(主要是图像或CSS)直观地创建类似按钮的元素

在表单外部,button元素的默认值是type=button(这通常是它唯一合理的type)。这意味着它只能通过JavaScript产生效果。这并不意味着它在任何方面都是无效的。但是,您可以考虑通过JavaScript生成这些按钮,而不是将它们作为静态HTML内容,这样当脚本被禁用时,就不会有(有效的,但)混淆的按钮什么也不做。

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

按钮类型=按钮元素类似于输入类型=按钮;区别在于后者没有内容,而是从属性中获取按钮中显示的文本,而按钮具有可以“丰富”(带有标记)的内容

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

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

发表评论