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

  以上內容如有錯誤之處歡迎指正。

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