Kiểu đầu vào = Thẻ gửi Thẻ Vs Vs chúng có thể hoán đổi cho nhau không?


233

input type="submit"buttonthẻ họ có thể hoán đổi cho nhau? hoặc nếu có sự khác biệt thì sử dụng input type="submit"khi nào và khi buttonnào?

Và nếu không có sự khác biệt thì tại sao chúng ta có 2 thẻ cho cùng một mục đích?



Tránh một ngày buồn cười trong khi sử dụng buttonvaluethuộc tính trong một số phiên bản IE, inputsẽ chỉ gửi những gì bạn mong đợi, một số phiên bản IE không chơi tốt với buttons.
Rubens Mariuzzo

Các câu trả lời về cơ bản giống như với input type="button"vs button type=button: stackoverflow.com/questions/469059/
triệt

Điều này có trả lời câu hỏi của bạn không? <nút> so với <kiểu đầu vào = "nút" />. Dùng loại nào?
leo núi

Câu trả lời:


131

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

Các nút được tạo bằng chức năng phần tử BUTTON giống như các nút được tạo bằng phần tử INPUT, nhưng chúng cung cấp khả năng hiển thị phong phú hơn: phần tử BUTTON có thể có nội dung. Ví dụ: phần tử BUTTON chứa các hàm hình ảnh giống và có thể giống với phần tử INPUT có loại được đặt thành "hình ảnh", nhưng loại phần tử BUTTON cho phép nội dung.

Vì vậy, đối với chức năng chỉ có thể hoán đổi cho nhau!

(Đừng quên, type="submit"là mặc định với button, vì vậy hãy bỏ qua!)


7
Chỉ cần cẩn thận, IE6 gửi các giá trị của tất cả các nút trên trang, điều này gây khó khăn cho việc xác định chính xác nút nào được nhấp. Giải thích: vatteryucas.com/blog/ie6-and-multipl-button-submit-elements
Sam

6
Chỉ cần FYI bạn không phải sử dụng type="submit"với nút, như mặc định typesubmit.
đồng bộ hóa

8
Đó là những gì W3C nói nhưng tôi khá chắc chắn rằng tôi đã thấy các trường hợp typemặc định là như vậy button. Tôi thích rõ ràng từng thuộc tính để tránh bất kỳ sự không nhất quán trình duyệt.
MatTheCat

5
theo tham khảo có. nhưng không phải tất cả các trình duyệt dính vào thông số kỹ thuật tham khảo, phải không?
EKanadily

2
@chharvey, không có cái trước có thể có các nút con; tức là nội dung phi văn bản. Tôi cho rằng bạn có thể nói rằng ngoài sự ngắn gọn không có lý do gì để cái sau tồn tại.
Paul Draper

71

Đây <input type="button">chỉ là một nút và sẽ không làm gì cả. Các <input type="submit">, khi bên trong một yếu tố hình thức, sẽ gửi biểu mẫu khi nhấp vào.

Một nút 'đặc biệt' hữu ích khác là nút <input type="reset">sẽ xóa biểu mẫu.


5
Câu hỏi là về thẻ nút không <input type = "button">
Caltor

7
Câu hỏi là về <input><button>thẻ. Bạn đã cung cấp thông tin hữu ích về <input>câu trả lời của bạn, nhưng nó thiếu <button>phía.
Pmpr

43

Sử dụng thẻ <button> thay vì <input type = "button" ..> . Đó là thực hành khuyên trong bootstrap 3.

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

"Kết xuất trình duyệt chéo

Để thực hành tốt nhất, chúng tôi khuyên bạn nên sử dụng phần tử <button> bất cứ khi nào có thể để đảm bảo kết xuất trình duyệt chéo phù hợp.

Trong số những thứ khác, có một lỗi Firefox ngăn chúng ta thiết lập chiều cao của các nút dựa trên <input>, khiến chúng không khớp chính xác với chiều cao của các nút khác trên Firefox. "


4
+1 cho điều này. buttonrõ ràng hơn nhiều, và đi kèm với ariacác tính năng trợ năng, và dễ dàng hơn nhiều để tạo kiểu. Nó cũng có tính chuyển tiếp, vì nó là HTML5.
dùng1429980

37

Mặc dù cả hai yếu tố cung cấp chức năng cho cùng một kết quả *, tôi thực sự khuyên bạn nên sử dụng<button> :

  • Rõ ràng hơn và dễ đọc hơn. inputgợi ý rằng điều khiển có thể chỉnh sửa hoặc người dùng có thể chỉnh sửa; buttonrõ ràng hơn nhiều về mục đích mà nó phục vụ
  • Dễ dàng hơn để tạo kiểu trong CSS; như đã đề cập ở trên, FIrefox và IE có các quirks input[type="submit"]không hiển thị chính xác trong một số trường hợp
  • Yêu cầu có thể dự đoán: IE có các hành vi rất rõ ràng khi các giá trị được gửi trong POST/ GETrequest đến máy chủ
  • Đánh dấu thân thiện; bạn có thể lồng các mục, ví dụ, các biểu tượng, bên trong nút.
  • HTML5, tư duy cầu tiến; là nhà phát triển, chúng tôi có trách nhiệm chấp nhận thông số kỹ thuật mới sau khi được chính thức hóa. HTML5, tính đến thời điểm hiện tại, đã chính thức được hơn một năm nay và đã được hiển thị trong nhiều trường hợp để thúc đẩy SEO .

* Ngoại trừ trong đó theo mặc định không có hành vi được chỉ định.<button type="button">

Tóm lại, tôi rất không khuyến khích sử dụng<input type="submit" /> .


Cảm ơn bạn. Tôi đã tìm kiếm điều này, đặc biệt là cho điểm ngữ nghĩa HTML5. Năm 2020, chúng ta phải nghĩ xa hơn chức năng thuần túy.
pierre_loic

27

<input type='submit' />không hỗ trợ HTML bên trong nó, vì nó là một thẻ tự đóng. <button>mặt khác, hỗ trợ HTML, hình ảnh, v.v. vì đây là cặp thẻ : <button><img src='myimage.gif' /></button>. <button>cũng linh hoạt hơn khi nói đến kiểu CSS.

Nhược điểm của <button>nó là nó không được hỗ trợ đầy đủ bởi các trình duyệt cũ. IE6 / 7, ví dụ, không hiển thị chính xác.

Trừ khi bạn có một số lý do cụ thể, tốt nhất là nên bám vào <input type='submit' />.


1
Câu trả lời là từ 2 năm trước. Ngoài ra, rất có thể chỉ định văn bản nút thay thế:<input type="submit" value="Log In" />
Jared Ng

2
@nailer Bạn hoàn toàn có quyền với ý kiến ​​của bạn, nhưng bất kỳ câu trả lời nào chắc chắn sẽ tham chiếu đến tình trạng công nghệ hiện tại. Có thể HTML 6 sẽ không dùng <button>thứ gì đó mới. Điều đó có nghĩa là chúng ta không nên đề cập đến một thẻ cụ thể trong câu trả lời, bởi vì nó có thể thay đổi tại một số điểm trong tương lai? Tôi muốn để nó như một bài tập cho người đọc để xác định cách trả lời áp dụng cho tình huống của họ. Miễn là thông tin có giá trị đối với người đọc, tôi không thấy vấn đề trong đó bao gồm thông tin đó.
Jared Ng

1
Tại thời điểm câu trả lời được viết, IE6 / 7 đã hết hạn. Một nhà phát triển web mới đọc bài đăng của bạn, mà không kiểm tra các đối số hỗ trợ của bạn và nhận ra họ không áp dụng nữa, sẽ nghĩ rằng có lý do chính đáng để không sử dụng các yếu tố 'nút'.
mikemaccana

2
@nailer Không có danh sách trình duyệt "lỗi thời" phổ quát nào được mọi người tôn trọng. Nơi làm việc khác nhau có các yêu cầu khác nhau cho các trình duyệt được hỗ trợ. Chỉ vì tiêu chuẩn "trình duyệt được hỗ trợ" của bạn trong năm 2011 không bao gồm IE6 / 7 không có nghĩa là trường hợp đó xảy ra ở mọi nơi.
Jared Ng

1
Tôi biết rằng không có danh sách trình duyệt "lỗi thời" phổ quát - do đó không phải mọi đề cập đến đều như vậy. Tất cả những gì tôi nói là điều này có thể được diễn đạt tốt hơn là "IE6 / 7 không hỗ trợ nút hiển thị chính xác. Nếu đó là vấn đề đáng lo ngại, hãy nhấn vào đầu vào" Tức là bạn biết các trình duyệt sẽ thay đổi, hãy tính đến nó. Điều này ngăn StackOverflow bị tạm dừng vĩnh viễn tại các giải pháp IE6.
mikemaccana

14

Tôi nhận ra đây là một câu hỏi cũ nhưng tôi đã tìm thấy nó trên mozilla.org và nghĩ rằng nó được áp dụng.

Một nút có thể có ba loại: gửi, đặt lại hoặc nút. Nhấp chuột vào nút gửi sẽ gửi dữ liệu của biểu mẫu đến trang web được xác định bởi thuộc tính hành động của thành phần.

Nhấp chuột vào nút đặt lại sẽ đặt lại tất cả các tiện ích biểu mẫu về giá trị mặc định của chúng ngay lập tức. Từ quan điểm của UX, điều này được coi là thực hành xấu.

Một nhấp chuột vào một nút nút không ... không có gì! Nghe có vẻ ngớ ngẩn, nhưng thật hữu ích khi xây dựng các nút tùy chỉnh bằng JavaScript.

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


Làm thế nào là hữu ích nếu nó không làm gì?
Mật ong

4
Bởi vì sau đó bạn có thể nối các trình xử lý vào sự kiện nhấp qua Javascript
fonso

@Honey chẳng hạn, bạn có thể mã a <button type="button">để chuyển một thanh trượt / băng chuyền sang slide tiếp theo.
chharvey

11

<button>là mới hơn <input type="submit">, là ngữ nghĩa hơn, dễ dàng cách điệu và hỗ trợ HTML bên trong nó.


8

Trong khi các câu trả lời khác là tuyệt vời và trả lời câu hỏi, có một điều cần xem xét khi sử dụng input type="submit"button. Với một input type="submit"bạn không thể sử dụng một phần tử giả CSS trên đầu vào nhưng bạn có thể cho một nút!

Đây là một lý do để sử dụng một buttonyếu tố trên đầu vào khi nói đến kiểu dáng.


3

Tôi không biết đây là lỗi hay tính năng, nhưng có một sự khác biệt rất quan trọng (đối với một số trường hợp) tôi đã tìm thấy: <input type="submit">tạo cặp giá trị chính trong yêu cầu của bạn và <button type="submit">không. Đã thử nghiệm trong Chrome và Safari.

Vì vậy, khi bạn có nhiều nút gửi trong biểu mẫu của mình và muốn biết nút nào được nhấp - không sử dụng button, input type="submit"thay vào đó hãy sử dụng .


từ kinh nghiệm của tôi theo cách hoàn toàn khác, nút vượt qua $ _POST ["submit_name"] và đầu vào KHÔNG. thử nghiệm trên chrome. Firefox gửi $ _POST ["submit_name"].
Gall Annonim

@GallAnnonim có thể phụ thuộc vào loại tài liệu. Bởi vì tôi chắc chắn sử dụng kiểu nhập = gửi và nó hoạt động trên chrome
Ivan Yarych

giới thiệu ... Tôi đã sử dụng <! DOCTYPE html> bằng cách sử dụng lang "pl" && mã hóa utf-8 nếu làm cho nó có bất kỳ sự khác biệt nào. chrome là 58.0.3029.96
Gall Annonim

-2

Nếu bạn đang nói về <input type=button>, nó sẽ không tự động gửi biểu mẫu

nếu bạn đang nói về <button>thẻ, nó mới hơn và không tự động gửi trong tất cả các trình duyệt.

Dòng dưới cùng, nếu bạn muốn biểu mẫu gửi khi nhấp vào trong tất cả các trình duyệt, hãy sử dụng <input type="submit">


14
Bạn có thể sử dụng <button type="submit">để tự động gửi biểu mẫu.
jumpnett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.