HTML <button> 元素
HTML <button> 元素 表示一个可点击的按钮。
以下代码展示了一个按钮:
<button type="button">点我!</button>
特性
| 内容类别 | 流式内容,短语内容,交互内容,可列举的,可标签的 和 可提交的 表单相关内容元素,可触知内容。 |
|---|---|
| 允许内容 | 短语内容。 |
| 遗漏标签 | 不允许,开始标签和结束标签都不能省略。 |
| 允许的父级元素 | 任何接受短语内容的元素。 |
| 允许的 ARIA 角色 |
checkbox, link, menuitem, menuitemcheckbox, menuitemradio, radio, switch, tab
|
| DOM 接口 | Button 对象 |
属性
该元素包含了 全局属性。
HTML5 中的新属性:autofocus、form、formaction、formenctype、formmethod、formnovalidate 以及 formtarget。
autofocus HTML5
一个布尔值的元素属性。用于指定当页面加载时,该按钮应当自动获得输入焦点。除非是用户重写,例如通过其他控件键入,才会失去焦点。一个文档中,只能有一个表单相关的元素可以指定该属性。
autocomplate
该属性用在 <button> 上还未标准化,是 Fireofx 特有的。不像其它浏览器,Firefox默认在页面跳转时,会保留 button 的动态禁用状态(Firefox persists the dynamic disabled state)。设置该属性为 off (即 autocomplete="off")可以关闭此特性。参见 bug 654072。可选值有:
onoff
disabled
一个布尔值的元素属性。表示用户不能和该按钮交互。如果该属性未设置,那么按钮继承自它的父元素的设置,例如 <fieldset>;如果父元素没有设置 disabled 属性,那么按钮是启用的。
form HTML5
form 属性表示该按钮所关联的表单元素 id。该属性的值必须是同一个文档中的 <form> 的 id 属性。如果该属性未指定,且 <button> 存在上级 <form> 元素,则关联到该元素。通过该属性,<button> 元素可以关联到一个文档中的任意位置的 <form> 元素,而不仅仅是作为 <form> 元素的后代。
formaction HTML5
表示该按钮提交时,接收表单信息的 URI。如果指定了,将会覆盖按钮所属表单的 action 属性。
formenctype HTML5
如果该按钮是一个提交按钮,该属性指定了在向服务器发送表单数据之前如何对其进行编码。该属性与 type="submit" 配合使用。可选值有:
-
application/x-www-form-urlencoded:默认值。在发送前对所有字符进行编码。 -
multipart/form-data:如果<input>元素的type属性设置为filetype时,使用该值。 -
text/plain:将空格转换为 "+" 符号,但不编码特殊字符。
如果指定了该属性,则覆盖掉按钮所属表单的 enctype 属性。
formmethod HTML5
如果按钮的类型是 submit,则该属性指定浏览器用于提交表单的 HTTP 方法。可选值有:
-
post: 表单中的数据包含在表单的正文中,并发送到服务器。 -
get: 表单中的数据以 “?” 作为分隔符,附加到 form 属性URI中,并将生成的URI发送到服务器。当表单没有副作用并且只包含ASCII字符时可以使用此方法。
如果指定了,该属性将覆盖按钮的表单所有者的 method 属性。
formnovalidate HTML5
一个布尔值的元素属性。如果按钮的类型是 submit,则此布尔属性指定在提交表单时不会验证该表单。如果指定了此属性,它将覆盖按钮的表单所有者的 novalidate 属性。
formtarget HTML5
如果按钮的类型是 submit,则此属性是一个名称或关键字,指示在提交表单后,在何处显示收到的响应(即 action URL的返回内容)。这是一个 浏览上下文(例如,标签页,窗口或内联框架)的名称或关键字。如果指定了此属性,它将覆盖按钮的表单所有者的 target 属性。以下关键字有特殊含义:
-
_self:将响应加载到当前的浏览上下文中。未指定时此值为默认值。 -
_blank:将响应加载到新的未命名浏览上下文中。 -
_parent:将响应加载到当前的父浏览上下文中。如果没有父级,则此选项的行为方式与_self相同。 -
_top:将响应加载到顶级浏览上下文(即,当前浏览上下文的祖先,且没有父级)。如果没有父级,则此选项的行为方式与_self相同。 -
framename:将响应加载到指定的
<iframe>中。
name
一个字符串。按钮的名称,提交时作为表单的数据一部分的名称。
type
规定按钮的类型。可选值有:
-
submit:该按钮表示点击后将表单数据提交到服务器。未指定属性时的默认值。或是将属性动态更改为空值或无效值时,也变为该默认值。 -
reset:该按钮将所有控件重置为其初始值。 -
button:该按钮没有默认行为。它可以用于按钮的事件发生时(如点击),触发关联的客户端的脚本。 -
menu:该按钮打开一个由它指定的<menu>元素定义的弹出菜单。
value
一个字符串。规定按钮的初始值。它定义了表单提交的数据中,按钮相关联的值。当表单中提交时,这个值便以参数的形式被递送至服务器。可由脚本进行修改。
事件属性
<button> 标签支持 HTML 的事件属性。
注意
给 <button> 元素加样式,要比 <input> 容易得多。你可以添加内联的 HTML 内容(如 <em>, <strong>,甚至是 <img>),还可以使用 :after 和 :before 伪元素来实现复杂的效果,而 <input> 只能设置一个文本的值,这是该元素与使用 <input> 元素创建的按钮之间的不同之处。
IE7 有一个 bug,当使用 <button type="submit" name="myButton" value="foo">Click me</button> 提交表单时,发送的 POST 数据将是 myButton=Click me 而不是 myButton=foo。
IE6 有一个更糟糕的 bug,当使用一个按钮提交表单时,所有的按钮都会出现和 IE7 相同的 bug。
这个 bug 在 IE8 已经被修复了。
如需兼容旧版浏览器,可使用 <input type="button"> 在 HTML 表单中创建按钮。
为了无障碍考虑,Firefox 会给获得焦点的按钮上加上一个小的点状边框。这个边框是通过浏览器样式表的 CSS 声明的,但是如果需要添加自己的焦点样式,可以使用 button<a href="/css-ref/prop-::-moz-focus-inner.html" title=" "><code>::-moz-focus-inner</code></a> { } 来重写。
不像其它浏览器,Firefox默认在页面跳转时,会保留 button 的动态禁用状态(Firefox persists the dynamic disabled state)。设置 autocomplete 属性的值为 off 可以关闭此特性。参见 bug 654072。
Firefox <35 for Android 会在所有按钮上的 background-image 设置默认的渐变(参见 bug 763671)。可以设置 background-image: none 来禁用该效果。
点击和焦点
在不同的浏览器和系统中,默认情况下,点击一个 <button> 是否会获得焦点的结果是不一样的。设置了 type="button" 和 type="submit" 的 <input> 元素获取焦点结果与 <button> 一致。
在桌面浏览器中,点击 <button> 是否能获得焦点?
| 桌面浏览器 | Windows 8.1 | OS X 10.9 |
|---|---|---|
| Firefox 30.0 | 是 | 否(即使设置了 tabindex) |
| Chrome 35 | 是 | 是 |
| Safari 7.0.5 | N/A | 否(即使设置了 tabindex) |
| Internet Explorer 11 | 是 | N/A |
| Presto (Opera 12) | 是 | 是 |
在移动桌面浏览器中,点击 <button> 是否能获得焦点?
| 移动浏览器 | iOS 7.1.2 | Android 4.4.4 |
|---|---|---|
| Safari Mobile | 否(即使设置了 tabindex) |
N/A |
| Chrome 35 | 否(即使设置了 tabindex) |
是 |
规范
| 规范 | 状态 | 备注 |
|---|---|---|
WHATWG HTML Living Standard<button> 的定义 |
现行的标准 | - |
HTML5<button> 的定义 |
推荐 | - |
HTML 4.01 Specification<button> 的定义 |
推荐 | - |
桌面浏览器兼容性
| 特性 | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| 基础支持 | 1.0 | 支持 | 1.0 (1.7 或更早) | 支持 | 支持 | 支持 |
formaction 属性 |
9.0 | 支持 | 4.0 (2.0) | 10 | 未知 | 未知 |
formenctype 属性 |
9.0 | 支持 | 4.0 (2.0) | 10 | 10.6 | 未知 |
formmethod 属性 |
9.0 | 支持 | 4.0 (2.0) | 10 | 未知 | 未知 |
autofocus 属性 |
5.0 | 支持 | 4.0 (2.0) | 10 | 9.6 | 5.0 |
type 属性的值为 menu
|
未实现 | 未实现 | 未实现[1] | 未实现 | 未实现 | 未知 |
移动浏览器兼容性
| 特性 | Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| 基础支持 | 支持 | 支持 | 1.0 (1.0) | 支持 | 支持 | 支持 |
formaction 属性 |
未知 | 支持 | 4.0 (2.0) | 未知 | 未知 | 未知 |
formenctype 属性 |
未知 | 支持 | 4.0 (2.0) | 未知 | 未知 | 未知 |
formmethod 属性 |
未知 | 支持 | 4.0 (2.0) | 未知 | 未知 | 未知 |
type 属性的值为 menu
|
未知 | 未实现 | 未知 | 未知 | 未知 | 未知 |
[1] Gecko 还未实现该特性。参见 bug 1241353.
相关链接
用于创建表单的元素:<form>,<datalist>,<fieldset>,<input>,<keygen>,<label>,<legend>,<meter>,<optgroup>,<option>,<output>,<progress>,<select>,<textarea>。