<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以下的变态要求了)。

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

HTMLbutton 标签和input type=button的区别相关推荐

  1. HTML button 和 input type=“button”的区别 / input type=submit 和button的区别

    HTML <button> 和 input type="button"的区别: 1. <button>标签里可以放文本图片等内容,与<input> ...

  2. button 与 input type=button 的区别【2012/07/23】

    <button>标签定义按钮.其内部可以放置内容(文本或者图像),这也是它与input创建按钮的不同之处. <button> 控件 与 <input type=" ...

  3. 解析button和input type=”button”的区别

    一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...

  4. 解析button和input type=button 的区别

    一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...

  5. botton与input type=button的区别

    一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...

  6. button与input type=button 的区别

    一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...

  7. input type=button与asp:button的区别,以及runat=server的作用

    <input type="button">与<asp:button>的区别,以及runat="server"的作用 在<input ...

  8. <input type = “button“>和<button></button>的区别

    <p id="demo">单击按钮创建button元素</p><button onclick="myFunction()" val ...

  9. input type=button和asp:Button的区别

    参考 https://www.cnblogs.com/fengwei0813/p/5574385.html https://bbs.csdn.net/topics/110186772 < inp ...

最新文章

  1. python代码格式-Python代码格式PEP8
  2. colpick-jQuery颜色选择器使用说明
  3. failed due to the following error: 80070005 错误解决方案
  4. Android程序员的进阶之路
  5. 《看聊天记录都学不会C语言?太菜了吧》(10)程序媛聪明绝顶了
  6. PYTHON-进阶-编码处理小结
  7. 统计通话次数和时间的软件_通话时间统计app下载|通话时间统计安卓版下载 v1.0.3 - 跑跑车安卓网...
  8. 还在用Tensorboard?机器学习实验管理平台大盘点
  9. Linux学习总结(65)——Linux 服务器安全强化的七个步骤
  10. 电脑运行VirtualBox虚拟机总是提示0x00000000错误的解决方法
  11. 分享一个Bing的翻译功能
  12. qt:cannot open C:\Users\某某某\AppData\Local\Temp\main.obj.15576.16.jom for write
  13. 使用OpenBTS基站测试物联网模块安全性
  14. 卷积神经网络图像分类的性能评估指标有哪些
  15. python画地图柱状图_Python 如何画出漂亮的地图?
  16. SQL Server 2014 SP2
  17. 英语影视台词---绿皮书(2)(利普 我以为你要把那家伙打死了)
  18. [日记]夜色中的雪世界
  19. NRF52832学习笔记(31)——Watchdog看门狗使用
  20. [python] 向量检索库Faiss使用指北

热门文章

  1. 基于mask rcnn的三维物体分割
  2. 吴军,阅读与写作,01理解他人,什么是合格的阅读理解?
  3. 这可能是全球发展最快的移动互联网公司
  4. 一文带你读懂HTTP协议的前世今生
  5. js设置input输入框为必选输入框,判断空格或null值
  6. 永信至诚打造企业安全人才提升方案 补齐企业安全短板
  7. SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation 论文解读
  8. 怎么加网上的精准引流?精准引流有没有小技巧?
  9. acwing算法基础课 844. 走迷宫
  10. 删除Maven骨架Archetype