input type = "submit" Tag tombol Vs apakah dapat dipertukarkan?

233

input type="submit"dan buttontag mereka dipertukarkan? atau jika ada perbedaan maka Kapan digunakan input type="submit"dan kapan button?

Dan jika tidak ada perbedaan maka mengapa kita memiliki 2 tag untuk tujuan yang sama?

Jitendra Vyas
sumber
Hindari hari yang lucu saat menggunakan buttondan valueatribut dalam beberapa versi IE, inputhanya akan mengirim apa yang Anda harapkan, beberapa versi IE tidak cocok dengan buttons.
Rubens Mariuzzo
Jawabannya pada dasarnya sama dengan input type="button"vs button type=button: stackoverflow.com/questions/469059/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Apakah ini menjawab pertanyaan Anda? <button> vs. <input type = "button" />. Yang mana untuk digunakan?
leonheess

Jawaban:

131

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

Tombol yang dibuat dengan fungsi elemen BUTTON sama seperti tombol yang dibuat dengan elemen INPUT, tetapi mereka menawarkan kemungkinan rendering yang lebih kaya: elemen BUTTON mungkin memiliki konten. Misalnya, elemen BUTTON yang berisi fungsi gambar suka dan mungkin menyerupai elemen INPUT yang tipenya diatur ke "gambar", tetapi tipe elemen BUTTON memungkinkan konten.

Jadi hanya untuk fungsi mereka bisa dipertukarkan!

(Jangan lupa, type="submit"ini standarnya button, jadi tinggalkan saja!)

MatTheCat
sumber
7
Berhati-hatilah, IE6 mengirimkan nilai semua tombol pada halaman, yang membuatnya sulit untuk menentukan dengan tepat tombol mana yang diklik. Penjelasan: vancelucas.com/blog/ie6-and-multiple-button-submit-elements
Sam
6
Hanya FYI yang tidak harus Anda gunakan type="submit"dengan tombol, karena standarnya typeadalah submit.
sinkronkan
8
Itulah yang dikatakan W3C tapi saya cukup yakin saya pernah melihat kasus di mana typedefaultnya button. Saya lebih suka secara eksplisit setiap atribut untuk menghindari ketidakkonsistenan browser.
MatTheCat
5
sesuai referensi ya. tetapi tidak semua browser tetap menggunakan spesifikasi referensi, bukan?
EKanadily
2
@ chharvey, tidak ada mantan mungkin memiliki simpul anak; yaitu konten non-teks. Saya kira Anda bisa mengatakan bahwa selain dari keringkasan ada alasan untuk yang terakhir ada.
Paul Draper
71

Ini <input type="button">hanya sebuah tombol dan tidak akan melakukan apa pun dengan sendirinya. Itu <input type="submit">, ketika di dalam elemen formulir, akan mengirimkan formulir ketika diklik.

Tombol 'khusus' lain yang bermanfaat adalah tombol <input type="reset">yang akan menghapus formulir.

Pemrogram
sumber
5
Pertanyaannya adalah tentang tag tombol bukan <input type = "button">
Caltor
7
Pertanyaannya adalah tentang <input>dan <button>tag. Anda memberikan informasi yang berguna tentang <input>jawaban Anda, tetapi tidak memiliki <button>sisi.
Pmpr
43

Gunakan tag <button> alih-alih <input type = "button" ..> . Ini adalah latihan yang disarankan dalam bootstrap 3.

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

"Render lintas browser

Sebagai praktik terbaik, kami sangat menyarankan menggunakan elemen <button> bila memungkinkan untuk memastikan rendering lintas-browser yang cocok.

Di antara hal-hal lain, ada bug Firefox yang mencegah kita mengatur ketinggian baris tombol berbasis <input>, menyebabkannya tidak sama persis dengan ketinggian tombol lain di Firefox. "

Rolfk
sumber
4
+1 untuk ini. buttonjauh lebih eksplisit, dan datang bersama dengan ariafitur aksesibilitas, dan jauh lebih mudah untuk ditata. Ini juga berpikiran maju, seperti HTML5.
user1429980
37

Meskipun kedua elemen memberikan hasil yang sama * secara fungsional , saya sangat menyarankan Anda menggunakan<button> :

  • Jauh lebih eksplisit dan mudah dibaca. inputmenyarankan bahwa kontrol dapat diedit , atau dapat diedit oleh pengguna; buttonjauh lebih eksplisit dalam hal tujuan yang dilayaninya
  • Lebih mudah untuk bergaya di CSS; seperti yang disebutkan di atas, FIrefox dan IE memiliki kebiasaan yang input[type="submit"]tidak ditampilkan dengan benar dalam beberapa kasus
  • Permintaan yang dapat diprediksi: IE memiliki perilaku yang sangat tinggi ketika nilai dikirimkan dalam POST/ GETpermintaan ke server
  • Ramah markup; Anda dapat menyarangkan item, misalnya, ikon, di dalam tombol.
  • HTML5, berpikiran maju; sebagai pengembang, adalah tanggung jawab kami untuk mengadopsi spesifikasi baru setelah disetujui. HTML5, pada saat ini, telah resmi selama lebih dari satu tahun sekarang, dan telah ditunjukkan dalam banyak kasus untuk meningkatkan SEO .

* Dengan pengecualian yang secara default tidak memiliki perilaku yang ditentukan.<button type="button">

Singkatnya, saya sangat menyarankan penggunaan<input type="submit" /> .

pengguna1429980
sumber
Terima kasih. Saya mencari ini, terutama untuk titik semantik HTML5. Pada tahun 2020, kita harus berpikir melampaui fungsionalitas murni.
pierre_loic
27

<input type='submit' />tidak mendukung HTML di dalamnya, karena ini adalah tag penutup sendiri. <button>, Di sisi lain, mendukung HTML, gambar, dll dalam karena itu sepasang tag: <button><img src='myimage.gif' /></button>. <button>juga lebih fleksibel dalam hal styling CSS.

Kerugiannya <button>adalah tidak didukung sepenuhnya oleh peramban lama. IE6 / 7, misalnya, tidak menampilkannya dengan benar.

Kecuali Anda memiliki alasan tertentu, mungkin yang terbaik adalah tetap berpegang pada <input type='submit' />.

Jared Ng
sumber
1
Jawabannya dari 2 tahun yang lalu. Selain itu, sangat mungkin untuk menentukan teks tombol alternatif:<input type="submit" value="Log In" />
Jared Ng
2
@ thumbnailer Anda berhak sepenuhnya atas pendapat Anda, tetapi jawaban apa pun pasti akan merujuk pada kondisi teknologi saat ini. Mungkin HTML 6 akan usang <button>dalam mendukung sesuatu yang baru. Apakah itu berarti kita tidak boleh menyebutkan tag tertentu dalam jawaban sama sekali, karena itu mungkin berubah di beberapa titik di masa depan? Saya lebih suka meninggalkannya sebagai latihan bagi pembaca untuk menentukan bagaimana jawaban berlaku untuk situasi mereka. Selama informasi itu berharga bagi pembaca, saya tidak melihat masalah dalam memasukkannya.
Jared Ng
1
Pada saat jawabannya ditulis, IE6 / 7 sudah kedaluwarsa. Pengembang web baru membaca posting Anda, tanpa memeriksa argumen pendukung Anda dan menyadari bahwa mereka tidak berlaku lagi, akan berpikir ada alasan bagus untuk tidak menggunakan elemen 'tombol'.
mikemaccana
2
@ thumbnailer Tidak ada daftar browser "ketinggalan zaman" universal yang ditaati oleh semua orang. Tempat kerja yang berbeda memiliki persyaratan yang berbeda untuk browser yang didukung. Hanya karena standar "peramban yang didukung" pada tahun 2011 tidak menyertakan IE6 / 7 tidak berarti itulah yang terjadi di mana-mana.
Jared Ng
1
Saya sadar tidak ada daftar browser "ketinggalan zaman" universal - karenanya tidak setiap menyebutkan hal seperti itu. Yang saya katakan adalah bahwa ini bisa lebih baik dengan kata "IE6 / 7 tidak mendukung tombol tampilan dengan benar. Jika itu masalah, tetap masukkan" Ya, Anda tahu browser akan berubah, pertanggungjawabkan. Ini menghentikan StackOverflow menjadi dijeda selamanya di solusi IE6.
mikemaccana
14

Saya menyadari ini adalah pertanyaan lama tetapi saya menemukan ini di mozilla.org dan saya pikir ini berlaku.

Sebuah tombol dapat terdiri dari tiga jenis: kirim, setel ulang, atau tombol. Klik pada tombol kirim mengirimkan data formulir ke halaman web yang ditentukan oleh atribut tindakan elemen.

Klik pada tombol setel ulang akan segera mereset semua widget formulir ke nilai defaultnya. Dari sudut pandang UX, ini dianggap praktik buruk.

Klik pada tombol tombol tidak ... apa-apa! Kedengarannya konyol, tetapi sangat berguna untuk membuat tombol khusus dengan JavaScript.

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

Jere.me
sumber
Bagaimana ini berguna jika tidak melakukan apa-apa?
Sayang
4
Karena Anda kemudian dapat mengaitkan penangan ke acara klik melalui Javascript
fonso
@ Madu misalnya Anda dapat kode <button type="button">untuk memajukan slider / korsel ke slide berikutnya.
chharvey
11

<button>lebih baru daripada <input type="submit">, lebih semantik, mudah untuk menyesuaikan dgn mode dan mendukung HTML di dalamnya.

Acaz Souza
sumber
8

Sementara jawaban lainnya bagus dan menjawab pertanyaan, ada satu hal yang perlu dipertimbangkan saat menggunakan input type="submit"dan button. Dengan input type="submit"Anda tidak dapat menggunakan elemen pseudo CSS pada input tetapi Anda bisa untuk tombol!

Ini adalah salah satu alasan untuk menggunakan buttonelemen pada input ketika datang ke styling.

L84
sumber
3

Saya tidak tahu apakah ini bug atau fitur, tetapi ada perbedaan yang sangat penting (setidaknya untuk beberapa kasus) yang saya temukan: <input type="submit">membuat pasangan nilai kunci dalam permintaan Anda dan <button type="submit">tidak. Diuji di Chrome dan Safari.

Jadi, ketika Anda memiliki beberapa tombol kirim di formulir Anda dan ingin tahu mana yang diklik - jangan gunakan button, gunakan input type="submit"saja.

Ivan Yarych
sumber
dari expirience saya benar-benar sebaliknya, tombol melewati $ _POST ["submit_name"] dan input TIDAK. diuji pada chrome. Firefox mengirimkan $ _POST ["submit_name"].
Gall Annonim
@ Galallnonim mungkin itu tergantung pada jenis dokumen. Karena saya pasti menggunakan input type = submit dan berfungsi di chrome
Ivan Yarych
intresting ... Saya menggunakan <! DOCTYPE html> menggunakan lang "pl" && encoding utf-8 jika membuatnya berbeda. chrome adalah 58.0.3029.96
Gall Annonim
-2

Jika Anda berbicara tentang <input type=button>, itu tidak akan secara otomatis mengirimkan formulir

jika Anda berbicara tentang <button>tag, itu lebih baru dan tidak secara otomatis dikirimkan di semua browser.

Intinya, jika Anda ingin formulir dikirimkan pada klik di semua browser, gunakan <input type="submit">

DarylChymko
sumber
14
Anda dapat menggunakan <button type="submit">untuk mengirim formulir secara otomatis.
jumpnett