HTML<button> 标签和<input type="button">的区别

本文详细解析了HTML中的&lt;button&gt;标签与&lt;input type='button'&gt;的区别及用法,包括按钮的属性、行为及在不同浏览器中的表现,并给出了实际应用场景建议。
<button>标签的定义及用法

  
w3school的解释:
  
  <button> 标签定义一个按钮。

  在 button 元素内部,您可以放置内容,比如文本或图像。这是该元素与使用 input 元素创建的按钮之间的不同之处。

  <button> 控件 与<input type=”button”> 相比,提供了更为强大的功能和更丰富的内容。<button> 与 </button> 标签之间的所有内容都是按钮的内容,其中包括任何可接受的正文内容,比如文本或多媒体内容。例如,我们可以在按钮中包括一个图像和相关的文本,用它们在按钮中创建一个吸引人的标记图像。

  唯一禁止使用的元素是图像映射,因为它对鼠标和键盘敏感的动作会干扰表单按钮的行为。

  请始终为按钮规定 type 属性。Internet Explorer 的默认类型是 “button”,而其他浏览器中(包括 W3C 规范)的默认值是 “submit”。

  研究了一下最后一句话,尝试了三种情况:
  
  1.在表单以外的地方使用<button>标签,表现为正常的按钮,可以用做事件触发器。

  2.在表单中使用<button>标签,但未指定type属性值,会像type值为submit的input控件一样完成表单提交动作。(IE8以下浏览器不会提交,正如上文,IE默认<button>标签的类型是”button”)

  3.在表单中使用<button>标签并指定属性为”button”, 即<button type=”button”> 随便写点字 </button>。表现和情况1中一样,不会提交表单。

  注释:如果在 HTML 表单中使用 button 元素,不同的浏览器会提交不同的按钮值。请使用 input 元素在 HTML 表单中创建按钮。

  看到这句话很奇怪,按钮的值怎么会提交呢,这和我之前的认知不一样,尝试后发现button的值确实是不会提交的,大概是我语文不好,理解有歧义。其实这句话的意思是你用操作DOM的方法去获取button元素的value值时不同的浏览器取到的情况不一样。

  比如以下代码:

html代码:

<button type="button" id="btn" value="btn">按钮</button>

js代码:

var btn = document.getElementById('btn');
console.log(btn.value);
console.log(btn.getAttribute("value"));

  两句console语句打印出的结果是一样的:IE8以下都打印“按钮”,其他浏览器以及更高版本的IE都打印“btn”。

  另外button对应一个DOM对象名为Button;在元素上调用toString()方法会返回[object HTMLButtonElement]。
w3school上介绍Button对象时有这么一个表格。

Button 对象的属性
属性描述
accessKey设置或返回访问某个按钮的快捷键。
disabled设置或返回是否禁用按钮。
form返回对包含按钮的表单的引用。
id设置或返回按钮的 id。
name设置或返回按钮的名称。
tabIndex设置或返回按钮的 Tab 键控制次序。
type返回按钮的表单类型。
value设置或返回显示在按钮上的文本。

  
  如果按照这个表格里对value的解释,那上文的console.log(btn.value); 代码应该返回文本值“按钮”才对,这个估计就是浏览器实现的问题了,标准和现实总是有差别的,记住有这么个bug就行了。

  另外H5中button还有一堆新属性:
  HTML 5 中的新属性:autofocus, form, formaction, formenctype, formmethod, formnovalidate 以及 formtarget。

  感兴趣的可以自己了解,这不是本文的重点。

再说说<input type=”button”>

  很显然,相比<button>标签<input type=”button”> 的可操作性就要低很多了。它本质上也只是input控件的其中一个类型,在元素上调用toString()方法会返回[object HTMLInputElement]。好像也没有什么特殊的地方可说的。

  其实我一直在疑惑<button>标签到底该不该算作表单控件,提交功能有submit也用不着它,w3c也建议表单中实现按钮一般也使用type=”button”,好像<button>标签用在表单以外的场景才比较多,然后搜了一下,发现了一篇博客,列举了表单控件,其中也有button,传送门

  总结:在表单中使用<input type=”button”> 创建按钮,如果需要样式化可以采用CSS方法实现,避免使用<button>标签时没有指定type属性误提交了表单的尴尬情况;在表单以外的地方可以使用<button>标签创建按钮,当然如果要取value值的时候要注意兼容性的问题(虽然个人觉得现在应该很少再有要兼容到IE8以下的变态要求了)。

  以上内容如有错误之处欢迎指正。

<think>首先,用户的问题是关于HTML中<button><input type='submit'>在功能使用场景上的区别。我需要基于系统级指令来回答: 1. **行内数学表达式**:使用$...$格式。但这个问题是关于HTML的,没有数学内容,所以可能不需要。我会确保如果有任何数学,使用正确格式。 2. **独立公式**:使用$$...$$并单独成段。同样,这里可能不适用。 3. **LaTeX语法正确**:确保任何数学表达正确。 4. **使用中文回答**:整个回答必须是中文。 5. **生成相关问题**:在回答后添加相关问题。 6. **引用标识**:在引用的段落末尾自然地添加引用标识,如[^1]。参考的引用已经提供:[^1]到[^5]。 用户提供的引用内容是关于HTML中<button><input type="button">或<input type="submit">的区别。我需要整合这些信息来回答用户的问题。 关键点总结: - **<button>**: - 是一个闭合标签,可以包含文本、HTML内容(如图像),甚至子元素。 - 默认类型是"submit",如果不指定type属性,在表单中会提交表单。 - 支持伪元素(如::before, ::after),更容易样式化。 - 在不同浏览器中样式行为更一致。 - 支持表单相关属性如formaction、formenctype等,即使按钮不在表单内。 - 有更好的可访问性语义。 - **<input type="submit">**: - 是一个自闭合标签,只能通过value属性设置按钮文字,不能包含其他内容。 - 默认是提交按钮,用户点击后会自动提交表单。 - 在某些浏览器中默认样式可能不同。 - 需要额外ARIA属性来增强可访问性。 用户具体问的是<button><input type='submit'>的区别,所以我需要聚焦在这两个上。 从引用中: - 引用[1]:<button>可以包含HTML,支持伪元素,默认type="submit"。 - 引用[2]:<button>在表单中未指定type时像submit一样提交表单。 - 引用[3]:<button>更容易样式化,支持表单相关属性,有更好的可访问性。 - 引用[4]:<button>可以包含多媒体内容,但可能有兼容性问题。 - 引用[5]:<input type="submit">是输入字段,通常是简单按钮;<button>允许更丰富的内容。 回答结构: - 保持清晰,逐步解释。 - 先介绍两者,然后比较功能使用场景。 - 最后添加相关问题。 回答大纲: 1. **介绍**:简要说明两者都是用于表单提交的按钮。 2. **功能区别**: - 内容能力:<button>可以包含HTML内容;<input type="submit">只能有文字。 - 默认行为:<button>默认type="submit",会提交表单;<input type="submit">总是提交表单。 - 样式灵活性:<button>更容易样式化,支持CSS伪元素。 - 表单属性:<button>支持formaction、formenctype等属性。 - 兼容性可访问性:<button>有更好的语义一致性。 3. **使用场景**: - 当需要自定义按钮内容(如图文结合)时,使用<button>。 - 当只需要简单文字按钮时,<input type="submit">也适用。 4. **总结**:推荐使用<button>以获得更多灵活性。 5. **相关问题**:生成2-3个相关问题。 生成相关问题: - 例如: 1. 如何为<button>添加自定义样式? 2. 在表单提交中,如何处理按钮的默认行为? 3. <button><input type="button">有什么区别? 确保引用标识:在回答中,当引用内容时,添加[^1]等。例如,根据引用[^3],<button>支持伪元素。 最终回答: - 用中文。 - 结构清晰。</think>### HTML中<button><input type='submit'>的区别HTML中,`<button>``<input type='submit'>`都用于创建表单提交按钮,但它们的功能、使用场景特性有显著差异。以下我将逐步解释它们的区别,帮助您更好地理解何时使用哪种元素。回答基于可靠的HTML标准常见实践[^3][^4][^5]。 #### 1. **标签结构与内容能力** - **`<button>`**: - 这是一个闭合标签(如`<button>点击我</button>`),可以包含文本、HTML内容(如图像、图标或其他元素),甚至子元素。例如: ```html <button type="submit"> <img src="icon.png" alt="图标"> 提交表单 </button> ``` - 默认情况下,如果不指定`type`属性,其类型为`submit`(在表单中点击时会自动提交表单)[^1][^2]。建议显式声明`type`属性(如`type="submit"`)以避免意外行为。 - **`<input type='submit'>`**: - 这是一个自闭合标签(如`<input type="submit" value="提交">`),只能通过`value`属性设置按钮文字。它不能包含任何HTML内容或子元素,只能显示纯文本[^3][^4]。 - **关键区别**:`<button>`更适合需要丰富内容(如图文结合)的场景,而`<input type='submit'>`仅适用于简单文本按钮[^4][^5]。 #### 2. **功能与默认行为** - **`<button>`**: - 默认类型为`submit`,因此在表单中点击时会自动提交表单。但您可以通过`type`属性指定其他行为: - `type="submit"`:提交表单(默认)。 - `type="reset"`:重置表单输入。 - `type="button"`:普通按钮,无默认行为[^1][^3]。 - 支持表单相关属性,如`formaction`(指定提交URL)、`formenctype`(设置编码类型),即使按钮不在表单内部(通过`form`属性关联表单)。这允许更灵活的提交控制,例如提交到不同地址[^3][^5]。 - **`<input type='submit'>`**: - 总是作为提交按钮,点击时自动提交表单。它没有`type`的其他选项(如`reset`或`button`),且不支持`formaction`等高级属性。功能相对单一,主要用于标准表单提交[^4][^5]。 - **关键区别**:`<button>`提供更细粒度的控制扩展功能(如自定义提交逻辑),而`<input type='submit'>`行为固定,适合简单提交需求[^3][^5]。 #### 3. **样式与灵活性** - **`<button>`**: - 更容易样式化,支持CSS伪元素(如`::before``::after`),允许添加图标、动画等效果。在不同浏览器中样式表现更一致[^3]。 - 示例:通过CSS轻松实现悬停效果。 ```css button:hover::after { content: "→"; color: blue; } ``` - **`<input type='submit'>`**: - 样式受限,不支持伪元素。默认样式可能因浏览器而异(如按钮大小或边框),需要更多CSS覆盖来统一外观[^3][^4]。 - **关键区别**:如果您需要高度自定义的按钮设计,`<button>`是更优选择;`<input type='submit'>`在简单场景下更轻量,但样式灵活性低[^3]。 #### 4. **兼容性与可访问性** - **`<button>`**: - 语义更清晰(表示一个可交互按钮),默认有较好的可访问性,适合屏幕阅读器。现代浏览器(包括IE9+)支持良好,但旧版IE(如IE8)可能需要额外处理默认行为[^2][^3]。 - **`<input type='submit'>`**: - 语义较弱,可能需要ARIA属性(如`aria-label`)来增强可访问性。浏览器兼容性普遍良好,但样式差异可能影响用户体验[^3][^4]。 - **关键区别**:`<button>`在可访问性语义化上更优,尤其对于无障碍网站;`<input type='submit'>`在兼容旧系统时可能更稳定[^3]。 #### 5. **使用场景推荐** - **使用`<button>`时**: - 需要按钮包含图像、图标或多行文本。 - 需要自定义提交逻辑(如不同表单动作)。 - 重视样式一致性可访问性。 - 示例:电商网站的“购买”按钮,包含购物车图标。 - **使用`<input type='submit'>`时**: - 只需简单文本按钮,且表单提交逻辑标准。 - 追求代码简洁性(自闭合标签更短)。 - 示例:登录表单的标准“提交”按钮。 - **最佳实践**:优先使用`<button>`以获得更多功能控制权,但确保显式设置`type`属性(如`type="submit"`)[^3][^5]。 #### 总结 `<button>``<input type='submit'>`的核心区别在于内容能力、功能扩展性样式灵活性。`<button>`支持富内容、高级表单属性,并易于样式化,适合复杂交互;而`<input type='submit'>`更轻量,但功能有限,适合简单场景。在大多数现代Web开发中,`<button>`是推荐的选择,除非有特定兼容性需求[^3][^4][^5]。 如果您有具体代码示例或场景,我可以进一步分析!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值