HTML 标签和的区别

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章