typ wejścia = „Prześlij” Tag przycisku Vs Czy są one wymienne?

233

input type="submit"i czy buttonsą one wymienne? lub jeśli jest jakaś różnica, to kiedy input type="submit"i kiedy użyć button?

A jeśli nie ma różnicy, to dlaczego mamy 2 tagi do tego samego celu?

Jitendra Vyas
źródło
Unikaj zabawnego dnia podczas używania, buttona valueatrybut w niektórych wersjach IE inputwyśle ​​po prostu to, czego się spodziewałeś, niektóre wersje IE nie działają dobrze z buttons.
Rubens Mariuzzo,
Odpowiedzi są w zasadzie takie same jak dla input type="button"vs button type=button: stackoverflow.com/questions/469059/...
Ciro Santilli 26 冠状 病 六四 事件 法轮功
Czy to odpowiada na twoje pytanie? <przycisk> vs. <typ wejścia = „przycisk” />. Którego użyć?
leonheess

Odpowiedzi:

131

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

Przyciski utworzone za pomocą elementu BUTTON działają podobnie jak przyciski utworzone za pomocą elementu INPUT, ale oferują bogatsze możliwości renderowania: element BUTTON może zawierać treść. Na przykład element BUTTON, który zawiera obraz, działa podobnie i może przypominać element INPUT, którego typ jest ustawiony na „image”, ale typ elementu BUTTON zezwala na treść.

Tylko pod względem funkcjonalności są one wymienne!

(Nie zapomnij, że type="submit"jest to ustawienie domyślne button, więc zostaw to!)

MatTheCat
źródło
7
Uwaga: IE6 przesyła wartości wszystkich przycisków na stronie, co utrudnia dokładne określenie, który przycisk został kliknięty. Objaśnienie: vancelucas.com/blog/ie6-and-multiple-button-submit-elements
Sam
6
Wystarczy, że nie musisz używać type="submit"przycisku, ponieważ domyślnie typejest to submit.
synchronizacja
8
Tak mówi W3C, ale jestem prawie pewien, że widziałem przypadki, w których typedomyślna była wartość domyślna button. Wolę wyraźnie określić każdy atrybut, aby uniknąć niespójności przeglądarki.
MatTheCat,
5
zgodnie z referencją tak. ale nie wszystkie przeglądarki trzymają się specyfikacji, prawda?
EKanadily,
2
@chharvey, żaden z tych pierwszych nie może mieć węzłów potomnych; tzn. treść nietekstowa. Przypuszczam, że można powiedzieć, że oprócz zwięzłości nie ma powodu, by istniała ta ostatnia.
Paul Draper,
71

To <input type="button">tylko przycisk i sam nic nie zrobi. <input type="submit">, Gdy wewnątrz elementu formularza, będzie przesłać formularz po kliknięciu.

Kolejnym przydatnym „specjalnym” przyciskiem jest ten <input type="reset">, który wyczyści formularz.

programista
źródło
5
Pytanie dotyczy tagu przycisku, a nie <input type = "button">
Caltor,
7
Pytanie dotyczy <input>i <button>tagów. W <input>swojej odpowiedzi podałeś przydatne informacje , ale brakuje w tym <button>boku.
Pmpr
43

Użyj tagu <button> zamiast <input type = "button" ..> . Jest to zalecana praktyka w bootstrap 3.

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

„Renderowanie w różnych przeglądarkach

Najlepszym rozwiązaniem jest użycie elementu <button> w miarę możliwości, aby zapewnić dopasowanie renderowania w różnych przeglądarkach.

Między innymi istnieje błąd Firefoksa, który uniemożliwia nam ustawienie wysokości linii przycisków opartych na <input>, co powoduje, że nie pasują one dokładnie do wysokości innych przycisków w przeglądarce Firefox. ”

rolfk
źródło
4
+1 za to. buttonjest o wiele bardziej jednoznaczny i zawiera ariafunkcje ułatwień dostępu oraz jest o wiele łatwiejszy do stylizacji. Jest również przyszłościowy, ponieważ jest HTML5.
user1429980,
37

Chociaż oba elementy zapewniają funkcjonalnie ten sam wynik *, zdecydowanie zalecamy użycie<button> :

  • Znacznie bardziej wyraźne i czytelne. inputsugeruje, że formant jest edytowalny lub może być edytowany przez użytkownika;buttonjest o wiele bardziej wyraźny pod względem celu, któremu służy
  • Łatwiej stylizować w CSS; jak wspomniano powyżej, FIrefox i IE mają dziwactwa, w których input[type="submit"]w niektórych przypadkach nie wyświetlają się poprawnie
  • Przewidywalne żądania: IE zachowuje się bardzo dobrze, gdy wartości są przesyłane do żądania POST/ GETdo serwera
  • Przyjazny dla znaczników; wewnątrz przycisku można zagnieżdżać elementy, na przykład ikony.
  • HTML5, wybiegające w przyszłość; jako programiści naszym obowiązkiem jest dostosowanie się do nowej specyfikacji po jej oficjalizacji. Obecnie HTML5 jest oficjalny od ponad roku i w wielu przypadkach wykazano, że poprawia SEO .

* Z wyjątkiem którego domyślnie nie ma określonego zachowania.<button type="button">

Podsumowując, bardzo odradzam korzystanie z<input type="submit" /> .

użytkownik1429980
źródło
Dziękuję Ci. Szukałem tego, szczególnie w kwestii semantycznej HTML5. W 2020 roku musimy wyjść poza czystą funkcjonalność.
pierre_loic
27

<input type='submit' />nie obsługuje HTML, ponieważ jest to pojedynczy samozamykający się tag. <button>Z drugiej strony, obsługuje HTML, obrazy, itp wewnątrz bo to parę tag: <button><img src='myimage.gif' /></button>.<button>jest również bardziej elastyczny, jeśli chodzi o styl CSS.

Wadą <button>jest to, że nie jest w pełni obsługiwany przez starsze przeglądarki. Na przykład IE6 / 7 nie wyświetla go poprawnie.

Chyba że masz jakiś konkretny powód, prawdopodobnie najlepiej się trzymać <input type='submit' />.

Jared Ng
źródło
1
Odpowiedź pochodzi z 2 lat temu. Ponadto bardzo możliwe jest określenie alternatywnego tekstu przycisku:<input type="submit" value="Log In" />
Jared Ng,
2
@nailer Masz pełne prawo do swojej opinii, ale każda odpowiedź nieuchronnie odniesie się do obecnego stanu technologii. Może HTML 6 przestanie działać <button>na korzyść czegoś nowego. Czy to oznacza, że ​​w ogóle nie powinniśmy wspominać o konkretnym tagu, ponieważ może on ulec zmianie w przyszłości? Wolę pozostawić to ćwiczenie czytelnikowi w celu ustalenia, w jaki sposób odpowiedzi odnoszą się do ich sytuacji. Tak długo, jak informacje są cenne dla czytelnika, nie widzę problemu z ich włączeniem.
Jared Ng
1
W momencie pisania odpowiedzi IE6 / 7 były już nieaktualne. Nowy programista czytający Twój post, nie sprawdzając argumentów wspierających i nie zdając sobie sprawy, że nie mają one zastosowania, uznałby, że istnieje dobry powód, aby nie używać elementów „przycisku”.
mikemaccana
2
@nailer Nie ma uniwersalnej „nieaktualnej” listy przeglądarek, której wszyscy się przestrzegają. Różne miejsca pracy mają różne wymagania dotyczące obsługiwanych przeglądarek. To, że Twój standard „obsługiwanych przeglądarek” w 2011 roku nie zawierał IE6 / 7, nie oznacza, że ​​tak jest wszędzie.
Jared Ng
1
Zdaję sobie sprawę, że nie ma uniwersalnej listy „nieaktualnych” przeglądarek - dlatego nie każdy o tym wspomina. Mówię tylko, że można by to lepiej sformułować, ponieważ „IE6 / 7 nie obsługuje poprawnie przycisku wyświetlania. Jeśli to jest problem, trzymaj się wpisu” Tzn. Wiesz, że przeglądarki się zmienią, uwzględnij to. Dzięki temu StackOverflow zostaje na zawsze wstrzymany na obejście IE6.
mikemaccana
14

Zdaję sobie sprawę, że to stare pytanie, ale znalazłem je na mozilla.org i myślę, że to dotyczy.

Przycisk może być trzech typów: prześlij, zresetuj lub przycisk. Kliknięcie przycisku wysyłania powoduje przesłanie danych formularza na stronę internetową zdefiniowaną przez atrybut akcji elementu.

Kliknięcie przycisku resetowania natychmiast resetuje wszystkie widżety formularzy do ich wartości domyślnej. Z punktu widzenia UX jest to uważane za złą praktykę.

Kliknięcie przycisku przycisku nie robi ... nic! Brzmi głupio, ale niezwykle przydatne jest budowanie niestandardowych przycisków za pomocą JavaScript.

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

Jere.me
źródło
Jak to jest użyteczne, jeśli nic nie robi?
Honey,
4
Ponieważ można następnie podpiąć
programy
@ Kochanie, na przykład, możesz napisać kod a, <button type="button">aby przesunąć suwak / karuzelę do następnego slajdu.
chharvey
11

<button>jest nowszy niż <input type="submit">, jest bardziej semantyczny, łatwy do stylizacji i obsługuje HTML w nim.

Acaz Souza
źródło
8

Podczas gdy pozostałe odpowiedzi są świetne i odpowiedzą na pytanie, jest jedna rzecz do rozważenia podczas używania input type="submit"i button. Nie input type="submit"możesz użyć pseudoelementu CSS na wejściu, ale możesz użyć przycisku!

Jest to jeden z powodów, dla których należy zastosować buttonelement nad wejściem, jeśli chodzi o stylizację.

L84
źródło
3

Nie wiem, czy to błąd, czy funkcja, ale znalazłem bardzo ważną (przynajmniej w niektórych przypadkach) różnicę: <input type="submit">tworzy parę klucz-wartość w twoim żądaniu i <button type="submit">nie robi tego. Testowane w Chrome i Safari.

Więc jeśli masz w formularzu wiele przycisków przesyłania i chcesz wiedzieć, który został kliknięty - nie używaj button, użyj input type="submit"zamiast tego.

Ivan Yarych
źródło
z mojego doświadczenia wynika, że ​​jest zupełnie odwrotnie, przycisk mija $ _POST [„nazwa_wysyłki”], a dane wejściowe NIE. testowane na chromie. Firefox zawsze wysyła $ _POST [„nazwa_składania”].
Gall Annonim
@GallAnnonim może to zależy od typu dokumentu. Ponieważ zdecydowanie używam typu danych wejściowych = prześlij i działa na Chrome
Ivan Yarych
Interesujące ... Użyłem <! DOCTYPE html> używając lang "pl" i kodowania utf-8, jeśli to robi jakąkolwiek różnicę. chrome jest 58.0.3029.96
Gall Annonim
-2

Jeśli mówisz o tym <input type=button>, formularz nie zostanie automatycznie przesłany

jeśli mówisz o <button>tagu, jest on nowszy i nie przesyła się automatycznie we wszystkich przeglądarkach.

Podsumowując, jeśli chcesz, aby formularz był przesyłany po kliknięciu we wszystkich przeglądarkach, użyj <input type="submit">

DarylChymko
źródło
14
Możesz użyć <button type="submit">do automatycznego przesyłania formularzy.
jumpnett