ประเภทอินพุต =“ ส่ง” แท็กปุ่ม Vs พวกมันสามารถใช้แทนกันได้หรือไม่


233

input type="submit"และbuttonแท็กใช้แทนกันได้หรือไม่ หรือหากมีความแตกต่างจากนั้นเมื่อใดควรใช้input type="submit"และเมื่อbuttonใด

และถ้าไม่มีความแตกต่างทำไมเรามี 2 แท็กเพื่อจุดประสงค์เดียวกัน



หลีกเลี่ยงวันที่ตลกขณะใช้งานbuttonและแอvalueททริบิวต์ใน IE บางเวอร์ชันinputจะส่งสิ่งที่คุณคาดหวังไว้บางเวอร์ชันของ IE จะเล่นได้ไม่ดีbuttonนัก
รูเบนส์ Mariuzzo

คำตอบนั้นเหมือนกันกับinput type="button"vs button type=button: stackoverflow.com/questions/469059/…
Ciro Santilli 法轮功冠状病病六四事件法轮功

สิ่งนี้ตอบคำถามของคุณหรือไม่ <button> เทียบกับ <input type = "button" /> ต้องใช้อะไร
leonheess

คำตอบ:


131

http://www.w3.org/TR/html4/interact/forms.html#h-17.5

ปุ่มที่สร้างขึ้นด้วยฟังก์ชั่นองค์ประกอบ BUTTON เช่นเดียวกับปุ่มที่สร้างขึ้นด้วยองค์ประกอบ INPUT แต่พวกมันให้ความเป็นไปได้ในการเรนเดอร์ที่ดียิ่งขึ้น: องค์ประกอบของปุ่มอาจมีเนื้อหา ตัวอย่างเช่นองค์ประกอบปุ่มที่มีฟังก์ชั่นภาพเช่นและอาจมีลักษณะคล้ายกับองค์ประกอบ INPUT ซึ่งมีการตั้งค่าประเภทเป็น "ภาพ" แต่ประเภทองค์ประกอบปุ่มช่วยให้เนื้อหา

ดังนั้นสำหรับฟังก์ชั่นการใช้งานเท่านั้น

(อย่าลืมว่าtype="submit"เป็นค่าเริ่มต้นด้วยbuttonดังนั้นโปรดทิ้งไว้!)


7
เพียงระวัง IE6 จะส่งค่าของปุ่มทั้งหมดในหน้าซึ่งทำให้ยากต่อการพิจารณาว่าปุ่มใดถูกคลิก คำอธิบาย: vancelucas.com/blog/ie6-and-multiple-button-submit-elements
Sam

6
เพียง FYI คุณไม่ได้มีการใช้งานtype="submit"ด้วยปุ่มเป็นค่าเริ่มต้นสำหรับการมีtype submit
ซิงค์

8
นั่นคือสิ่งที่ W3C กล่าวว่า แต่ผมค่อนข้างมั่นใจว่ากรณีที่ผมเคยเห็นที่เริ่มต้นเป็นtype buttonฉันต้องการให้แต่ละแอตทริบิวต์ชัดเจนเพื่อหลีกเลี่ยงความไม่สอดคล้องกันของเบราว์เซอร์
MatTheCat

5
อ้างอิงใช่ แต่ไม่ใช่ทุกเบราว์เซอร์ที่ยึดติดกับข้อมูลอ้างอิงใช่มั้ย
EKanadily

2
@chharvey ไม่มีอดีตอาจมีโหนดย่อย เช่นเนื้อหาที่ไม่ใช่ข้อความ ฉันคิดว่าคุณสามารถพูดได้ว่านอกเหนือจากความกะทัดรัดไม่มีเหตุผลสำหรับการดำรงอยู่หลัง
พอลเดรเปอร์

71

<input type="button">เป็นเพียงปุ่มและจะไม่ทำอะไรด้วยตัวเอง <input type="submit">เมื่อภายในองค์ประกอบรูปแบบที่จะส่งแบบฟอร์มเมื่อคลิก

อีกปุ่ม 'พิเศษ' ที่มีประโยชน์คือปุ่ม<input type="reset">ที่จะเคลียร์ฟอร์ม


5
คำถามเกี่ยวกับแท็กปุ่มไม่ <input type = "button">
Caltor

7
คำถามเกี่ยวกับ<input>และ<button>แท็ก คุณให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับ<input>ในคำตอบของคุณ แต่ขาด<button>ด้านข้าง
2017

43

การใช้งาน <ปุ่ม> แท็กแทน <input type = "ปุ่ม" .. > มันเป็นแนวทางปฏิบัติที่แนะนำใน bootstrap 3

http://getbootstrap.com/css/#buttons-tags

"การแสดงผลข้ามเบราว์เซอร์

เพื่อเป็นการปฏิบัติที่ดีที่สุดเราขอแนะนำให้ใช้องค์ประกอบ <button> เมื่อใดก็ตามที่เป็นไปได้เพื่อให้แน่ใจว่าการแสดงผลข้ามเบราว์เซอร์ตรงกัน

เหนือสิ่งอื่นใดมีข้อบกพร่องของ Firefox ที่ทำให้เราไม่สามารถตั้งค่าความสูงบรรทัดของ <input> - ตามปุ่มทำให้พวกเขาไม่ตรงกับความสูงของปุ่มอื่น ๆ บน Firefox "


4
+1 สำหรับสิ่งนี้ buttonมีความชัดเจนมากขึ้นและมาพร้อมกับariaคุณลักษณะการช่วยสำหรับการเข้าถึงและมีสไตล์ที่ง่ายกว่ามาก นอกจากนี้ยังเป็นการคาดการณ์ล่วงหน้าเนื่องจากเป็น HTML5
user1429980

37

แม้ว่าองค์ประกอบทั้งสองส่งมอบหน้าที่ผล * เดียวกันผมขอแนะนำให้คุณใช้<button> :

  • ชัดเจนยิ่งขึ้นและสามารถอ่านได้ inputแสดงให้เห็นว่าการควบคุมสามารถแก้ไขได้หรือสามารถแก้ไขได้โดยผู้ใช้; buttonมีความชัดเจนมากขึ้นในแง่ของวัตถุประสงค์ที่ให้บริการ
  • สไตล์ใน CSS ง่ายขึ้น ตามที่ระบุไว้ข้างต้น FIrefox และ IE มีนิสัยใจคอที่input[type="submit"]ไม่แสดงอย่างถูกต้องในบางกรณี
  • คำขอที่คาดการณ์ได้: IE มีพฤติกรรมที่น่าสนใจมากเมื่อมีการส่งค่าในPOST/ GETคำขอไปยังเซิร์ฟเวอร์
  • มาร์กอัปง่าย; คุณสามารถซ้อนรายการต่างๆได้เช่นไอคอนภายในปุ่ม
  • HTML5, การคิดล่วงหน้า ในฐานะนักพัฒนามันเป็นความรับผิดชอบของเราที่จะนำไปใช้กับสเป็คใหม่เมื่อมันเป็นทางการ HTML5, ณ ตอนนี้ได้รับอย่างเป็นทางการมานานกว่าหนึ่งปีในขณะนี้และได้รับการแสดงในหลาย ๆ กรณีที่จะเพิ่ม SEO

* ด้วยข้อยกเว้นตามค่าเริ่มต้นที่ไม่มีการระบุพฤติกรรม<button type="button">

โดยสรุปผมขอกีดกันการใช้งานของ<input type="submit" />


ขอบคุณ. ฉันกำลังมองหาสิ่งนี้โดยเฉพาะอย่างยิ่งสำหรับจุดความหมาย HTML5 ในปี 2020 เราต้องคิดนอกเหนือจากการทำงานที่บริสุทธิ์
pierre_loic

27

<input type='submit' />ไม่รองรับ HTML ที่อยู่ภายในเนื่องจากเป็นแท็กปิดตัวเองเพียงครั้งเดียว <button>บนมืออื่น ๆ ที่สนับสนุน HTML, ภาพ ฯลฯ <button><img src='myimage.gif' /></button>ภายในเพราะมันเป็นคู่แท็ก: <button>มีความยืดหยุ่นมากขึ้นเมื่อพูดถึงสไตล์ CSS

ข้อเสียของ<button>คือไม่รองรับเบราว์เซอร์รุ่นเก่าอย่างเต็มที่ ตัวอย่างเช่น IE6 / 7 ไม่แสดงอย่างถูกต้อง

<input type='submit' />ถ้าคุณมีเหตุผลที่เฉพาะเจาะจงบางอย่างก็อาจจะดีที่สุดที่จะติด


1
คำตอบมาจาก 2 ปีที่ผ่านมา นอกจากนี้ยังเป็นไปได้มากที่จะระบุข้อความปุ่มทางเลือก:<input type="submit" value="Log In" />
Jared Ng

2
@ thumbnailer คุณมีสิทธิ์อย่างเต็มที่ที่จะแสดงความคิดเห็นของคุณ แต่คำตอบใด ๆ จะอ้างอิงสถานะของเทคโนโลยีในปัจจุบันอย่างหลีกเลี่ยงไม่ได้ บางที HTML 6 อาจไม่<button>รองรับสิ่งใหม่ ๆ นั่นหมายความว่าเราไม่ควรพูดถึงแท็กเฉพาะในคำตอบ แต่อย่างใดเพราะอาจมีการเปลี่ยนแปลงในอนาคต ฉันต้องการปล่อยให้มันเป็นแบบฝึกหัดให้กับผู้อ่านเพื่อพิจารณาว่าคำตอบมีผลกับสถานการณ์ของพวกเขาอย่างไร ตราบใดที่ข้อมูลมีค่าต่อผู้อ่านฉันไม่เห็นปัญหาในการรวมเข้าด้วยกัน
Jared Ng

1
ในขณะที่คำตอบถูกเขียนขึ้น IE6 / 7 นั้นล้าสมัยแล้ว นักพัฒนาเว็บใหม่กำลังอ่านโพสต์ของคุณโดยไม่ตรวจสอบข้อโต้แย้งที่สนับสนุนของคุณและตระหนักว่าพวกเขาไม่ได้ใช้อีกต่อไปจะคิดว่ามีเหตุผลที่ดีที่จะไม่ใช้องค์ประกอบ 'ปุ่ม'
mikemaccana

2
@nailer ไม่มีรายการเบราว์เซอร์ "ล้าสมัย" ที่เป็นสากลที่ทุกคนปฏิบัติตาม สถานที่ทำงานที่แตกต่างกันมีข้อกำหนดที่แตกต่างกันสำหรับเบราว์เซอร์ที่รองรับ เพียงเพราะมาตรฐานของคุณ "เบราว์เซอร์ที่รองรับ" ในปี 2011 ไม่ได้รวม IE6 / 7 ไม่ได้หมายความว่าเป็นอย่างนั้นทุกที่
Jared Ng

1
ฉันรู้ว่าไม่มีรายการเบราว์เซอร์ "ล้าสมัย" ที่เป็นสากลดังนั้นจึงไม่ใช่ทุกคนที่กล่าวถึงสิ่งนี้ ทั้งหมดที่ฉันพูดก็คือสิ่งนี้อาจพูดได้ดีกว่าเพราะ "IE6 / 7 ไม่รองรับปุ่มแสดงผลอย่างถูกต้องหากเป็นเรื่องที่กังวลให้ป้อน" Ie คุณรู้ว่าเบราว์เซอร์จะเปลี่ยนไป สิ่งนี้จะหยุด StackOverflow ให้หยุดชั่วคราวที่ IE6
mikemaccana

14

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันพบใน mozilla.org และคิดว่ามันใช้ได้

ปุ่มสามารถมีได้สามประเภท: ส่ง, รีเซ็ตหรือปุ่ม คลิกที่ปุ่มส่งส่งข้อมูลของแบบฟอร์มไปยังหน้าเว็บที่กำหนดโดยแอตทริบิวต์การกระทำขององค์ประกอบ

การคลิกที่ปุ่มรีเซ็ตจะเป็นการรีเซ็ตวิดเจ็ตฟอร์มทั้งหมดเป็นค่าเริ่มต้นทันที จากมุมมองของ UX ถือว่าเป็นการปฏิบัติที่ไม่ดี

การคลิกที่ปุ่มปุ่มไม่ทำอะไรเลย! ฟังดูงี่เง่า แต่มีประโยชน์อย่างยิ่งในการสร้างปุ่มที่กำหนดเองด้วย JavaScript

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/My_first_HTML_form#And_a_<button>_to_finish


มันจะมีประโยชน์อย่างไรถ้ามันไม่ทำอะไรเลย?
ฮันนี่

4
เนื่องจากคุณสามารถเชื่อม
โยง

@ เงินรางวัลตัวอย่างเช่นคุณสามารถโค้ด a <button type="button">เพื่อเลื่อนตัวเลื่อน / สไลด์ไปยังสไลด์ถัดไป
chharvey

11

<button>ใหม่กว่า<input type="submit">มีความหมายง่ายต่อการตกแต่งและรองรับ HTML ภายใน


8

ในขณะที่คำตอบอื่น ๆ ที่ดีและตอบคำถามมีสิ่งหนึ่งที่จะต้องพิจารณาเมื่อมีการใช้และinput type="submit" buttonด้วยการที่input type="submit"คุณไม่สามารถใช้องค์ประกอบหลอก CSS บนอินพุต แต่คุณสามารถทำได้เพียงปุ่มเดียว!

นี่คือเหตุผลหนึ่งในการใช้buttonองค์ประกอบเหนืออินพุตเมื่อมีการกำหนดสไตล์


3

ฉันไม่รู้ว่านี่เป็นข้อผิดพลาดหรือคุณลักษณะ แต่มีความแตกต่างที่สำคัญมาก (อย่างน้อยในบางกรณี) ที่ฉันพบ: <input type="submit">สร้างคู่ค่าคีย์ในคำขอของคุณและ<button type="submit">ไม่ ทดสอบใน Chrome และ Safari

ดังนั้นเมื่อคุณมีปุ่มส่งหลายปุ่มในแบบฟอร์มของคุณและต้องการทราบว่ามีการคลิกปุ่มใด - อย่าใช้buttonให้ใช้input type="submit"แทน


จากการหมดอายุของฉันเป็นอย่างอื่นปุ่มจะผ่าน $ _POST ["submit_name"] และการป้อนข้อมูลไม่ ทดสอบบนโครเมียม Firefox ส่งเงิน $ _POST ["submit_name"] ทุกอย่าง
Gall Annonim

@GallAnnonim อาจขึ้นอยู่กับประเภทของเอกสาร เพราะฉันใช้ input type = submit แน่นอนและมันใช้งานได้กับ chrome
Ivan Yarych

intresting ... ฉันใช้ <! DOCTYPE html> โดยใช้ lang "pl" && encoding utf-8 ถ้ามันทำให้เกิดความแตกต่าง chrome คือ 58.0.3029.96
Gall Annonim

-2

หากคุณกำลังพูดถึง<input type=button>มันจะไม่ส่งแบบฟอร์มโดยอัตโนมัติ

หากคุณกำลังพูดถึง<button>แท็กแสดงว่าเป็นแท็กที่ใหม่กว่าและไม่ส่งโดยอัตโนมัติในเบราว์เซอร์ทั้งหมด

บรรทัดล่างหากคุณต้องการให้แบบฟอร์มส่งเมื่อคลิกในเบราว์เซอร์ทั้งหมดให้ใช้ <input type="submit">


14
คุณสามารถใช้<button type="submit">ในการส่งแบบฟอร์มโดยอัตโนมัติ
jumpnett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.