[HTML] <button type="button"></button> 和 <input type="button"> 的差別

  • 23078
  • 0
  • 2013-07-02

摘要: 的差別

最大的差別在於 <button> 有開始與結束標籤,因此你可以在 <button></button> 之間放置各種內容,而 <input> 就會比較受限制。除了這點,各種瀏覽器在 submit 表單時,行為也會有所不同,為了釐清,我用 apache + mod_python 做個實驗。

 

實驗 1,<button> 不指定 type 屬性與 <input type="button"> 的差別:

建立兩個檔案,內容如下:

index.html

<HTML>
<BODY>
<FORM action="py/test.py" method="post">
	<BUTTON name="btn" value="AAAA">BBBB</BUTTON>
	<INPUT name="ipt" type="button" value="CCCC">
</FORM>
</HTML>

 

/py/test.py

def index(req):
	form = req.form
  
	btn = form['btn'] if form.has_key('btn') else None
	ipt = form['ipt'] if form.has_key('ipt') else None

	return (btn, ipt)

 

瀏覽器畫面顯示如下:

 

按下 BBBB (<button> 不指定 type 屬性)的結果:

IE6,IE8:無反應
Chrome 26:送出表單,回應 (Field('btn', 'AAAA'), None)
Firefox 19:送出表單,回應 (Field('btn', 'AAAA'), None)
Safari:送出表單,回應 (Field('btn', 'AAAA'), None)

 

會有這樣的差別是因為 IE 的 <button> 預設 type="button",而其他瀏覽器預設 type="submit"。

 

按下 CCCC (<input type="button">)的結果:

IE6,IE8:無反應
Chrome 26:無反應
Firefox 19:無反應
Safari:無反應


 

<input type="button"> 則只是產生一個按鈕外觀,當然按下也不會有任何動作(可參考第一篇回應提供的資料)。

 

 

 

實驗 2,<button type="submit"></button> 與 <input type="submit"> 比較:

index.html

<HTML>
<BODY>
<FORM action="py/test.py" method="post">
	<BUTTON name="btn1" type="submit" value="AAAA">BBBB</BUTTON>
	<BUTTON name="btn2" type="button" value="CCCC">DDDD</BUTTON>
	<INPUT name="ipt" type="submit" value="EEEE">
	<INPUT name="txt" value="FFFF">
</FORM>
</HTML>

 

/py/test.py

def index(req):
	form = req.form
  
	btn1 = form['btn1'] if form.has_key('btn1') else None
	btn2 = form['btn2'] if form.has_key('btn2') else None
	ipt = form['ipt'] if form.has_key('ipt') else None
	txt = form['txt'] if form.has_key('txt') else None

	return (btn1, btn2, ipt, txt)

 

瀏覽器畫面顯示如下:

 

先來看按下 BBBB (<button type="submit">) 的結果:

IE6,IE8:(Field('btn1', 'BBBB'), Field('btn2', 'DDDD'), None, Field('txt', 'FFFF'))
Chrome 26:(Field('btn1', 'AAAA'), None, None, Field('txt', 'FFFF'))
Firefox 19:(Field('btn1', 'AAAA'), None, None, Field('txt', 'FFFF'))
Safari 5:(Field('btn1', 'AAAA'), None, None, Field('txt', 'FFFF'))

 

實驗觀察:

1. IE 送出 <button></button> 之間的內容,其他瀏覽器則是送出 <button> 的  value 屬性。

2. IE 忽略 <input type="sumbit"> 其他表單資料都送出,包含不同 type 的 <button>。

3. 其他瀏覽器則送出被按下的 <button>,其他 <button> 與 <input type="submit"> 不會被送出。

 

再來看按下 CCCC (<input type="submit">) 的結果:

IE6:(Field('btn1', 'BBBB'), Field('btn2', 'DDDD'), Field('ipt', 'EEEE'), Field('txt', 'FFFF'))
IE8:(None, Field('btn2', 'DDDD'), Field('ipt', 'EEEE'), Field('txt', 'FFFF'))
Chrome 26:(None, None, Field('ipt', 'EEEE'), Field('txt', 'FFFF'))
Firefox 19:(None, None, Field('ipt', 'EEEE'), Field('txt', 'FFFF'))
Safari 5:(None, None, Field('ipt', 'EEEE'), Field('txt', 'FFFF'))

 

實驗觀察:

1. IE6 送出表單所有資料。

2. IE8 忽略 <button type="submit"> 其他表單資料都送出,包含 <button type="button">。

3. 其他瀏覽器忽略所有 <button>  ,送出表單資料。

 

<button type="button" onclick="document.form.submit();"></button> 
其行為跟 <input type="submit"> 相似,即使你按下該 <button> ,它的值也不會被送出。

參考:

[1] HTML <input> Tag

[2] HTML <button> Tag

[3] Button tag in bloody Internet Explorer