input type = "submit" I tag del pulsante V sono intercambiabili?


233

input type="submit"e buttontag sono intercambiabili? o se c'è qualche differenza allora quando usare input type="submit"e quando button?

E se non ci sono differenze, allora perché abbiamo 2 tag per lo stesso scopo?



Evita una giornata divertente durante l'utilizzo buttone l' valueattributo in alcune versioni di IE, inputinvierà solo quello che ti aspettavi, alcune versioni di IE non funzionano bene con buttons.
Rubens Mariuzzo,

Le risposte sono fondamentalmente le stesse che per input type="button"contro button type=button: stackoverflow.com/questions/469059/...
Ciro Santilli郝海东冠状病六四事件法轮功

Risposte:


131

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

I pulsanti creati con l'elemento BUTTON funzionano esattamente come i pulsanti creati con l'elemento INPUT, ma offrono possibilità di rendering più complete: l'elemento BUTTON può avere contenuto. Ad esempio, un elemento BUTTON che contiene un'immagine funziona come e può assomigliare a un elemento INPUT il cui tipo è impostato su "immagine", ma il tipo di elemento BUTTON consente il contenuto.

Quindi solo per funzionalità sono intercambiabili!

(Non dimenticare, type="submit"è l'impostazione predefinita con button, quindi lascialo spento!)


7
Attenzione, IE6 invia i valori di tutti i pulsanti sulla pagina, il che rende difficile determinare esattamente quale pulsante è stato cliccato. Spiegazione: vancelucas.com/blog/ie6-and-multiple-button-submit-elements
Sam

6
Cordiali saluti, non è necessario utilizzare type="submit"con il pulsante, poiché l'impostazione predefinita typeè submit.
sincronizza il

8
Questo è ciò che dice W3C ma sono abbastanza sicuro di aver visto casi in cui il typevalore predefinito era button. Preferisco esplicitare ogni attributo per evitare incoerenze nel browser.
MatTheCat il

5
secondo riferimento sì. ma non tutti i browser si attengono alle specifiche di riferimento, giusto?
EKanadily,

2
@chharvey, nessun primo può avere nodi figlio; cioè contenuto non testuale. Suppongo che si possa dire che, a parte la brevità, non vi è alcuna ragione per cui quest'ultima esiste.
Paul Draper,

71

Il <input type="button">è solo un pulsante e non farà nulla per sé. Il <input type="submit">, quando all'interno di un elemento form, verrà inviare il modulo quando si fa clic.

Un altro utile pulsante "speciale" è quello <input type="reset">che cancellerà il modulo.


5
La domanda riguarda il tag del pulsante non <input type = "button">
Caltor

7
La domanda riguarda <input>e <button>tag. Hai fornito informazioni utili sulla <input>tua risposta, ma manca di <button>lato.
Pmpr

43

Utilizzare il tag <button> anziché <input type = "button" ..> . È la pratica consigliata in bootstrap 3.

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

"Rendering tra browser

Come best practice, consigliamo vivamente di utilizzare l'elemento <button> ogni volta che è possibile per garantire la corrispondenza del rendering tra browser.

Tra le altre cose, c'è un bug di Firefox che ci impedisce di impostare l'altezza della linea dei pulsanti basati su <input>, facendo sì che non corrispondano esattamente all'altezza degli altri pulsanti su Firefox. "


4
+1 per questo. buttonè molto più esplicito e ariainclude funzionalità di accessibilità ed è molto più semplice da definire. È anche lungimirante, in quanto è HTML5.
user1429980,

37

Sebbene entrambi gli elementi forniscano funzionalmente lo stesso risultato *, ti consiglio vivamente di usare<button> :

  • Molto più esplicito e leggibile. inputsuggerisce che il controllo è modificabile o può essere modificato dall'utente; buttonè molto più esplicito in termini di scopo che serve
  • Più facile da definire in stile CSS; come accennato in precedenza, FIrefox e IE hanno stranezze in cui input[type="submit"]in alcuni casi non vengono visualizzati correttamente
  • Richieste prevedibili: IE ha comportamenti molto critici quando i valori vengono inviati in POST/ GETrequest al server
  • Markup-friendly; puoi nidificare oggetti, ad esempio icone, all'interno del pulsante.
  • HTML5, lungimirante; come sviluppatori, è nostra responsabilità adottare le nuove specifiche una volta che sono state ufficializzate. HTML5, sin da ora, è ufficiale da oltre un anno e in molti casi ha dimostrato di potenziare la SEO .

* Ad eccezione del quale per impostazione predefinita non ha un comportamento specificato.<button type="button">

In sintesi, scoraggio fortemente l'uso di<input type="submit" /> .


Grazie. Stavo cercando questo, specialmente per il punto semantico HTML5. Nel 2020, dobbiamo pensare oltre la pura funzionalità.
pierre_loic,

27

<input type='submit' />non supporta l'HTML al suo interno, poiché è un singolo tag a chiusura automatica. <button>, D'altra parte, supporta HTML, immagini, ecc dentro perché è un paio di tag: <button><img src='myimage.gif' /></button>. <button>è anche più flessibile quando si tratta di stile CSS.

Lo svantaggio di <button>è che non è completamente supportato dai browser più vecchi. IE6 / 7, ad esempio, non lo visualizza correttamente.

A meno che tu non abbia qualche motivo specifico, probabilmente è meglio attenersi <input type='submit' />.


1
La risposta è stata di 2 anni fa. Inoltre, è molto possibile specificare un testo pulsante alternativo:<input type="submit" value="Log In" />
Jared Ng

2
@nailer Hai perfettamente diritto alla tua opinione, ma qualsiasi risposta farà inevitabilmente riferimento allo stato attuale della tecnologia. Forse HTML 6 si deprecherà <button>a favore di qualcosa di nuovo. Ciò significa che non dovremmo assolutamente menzionare un tag specifico nelle risposte, perché potrebbe cambiare ad un certo punto in futuro? Preferirei lasciarlo come esercizio al lettore per determinare come le risposte si applicano alla loro situazione. Finché le informazioni sono preziose per il lettore, non vedo il problema nel includerle.
Jared Ng,

1
Al momento della risposta, IE6 / 7 era già obsoleto. Un nuovo sviluppatore web che legge il tuo post, senza controllare i tuoi argomenti di supporto e rendendosi conto che non si applicano più, penserebbe che ci siano buone ragioni per non usare gli elementi "pulsante".
mikemaccana,

2
@nailer Non esiste un elenco universale di browser "obsoleti" rispettato da tutti. Luoghi di lavoro diversi hanno requisiti diversi per i browser supportati. Solo perché il tuo standard di "browser supportati" nel 2011 non includeva IE6 / 7 non significa che sia così ovunque.
Jared Ng,

1
Sono consapevole che non esiste un elenco universale di browser "non aggiornati", quindi non tutti citano una cosa del genere. Tutto quello che sto dicendo è che questo potrebbe essere meglio formulato in quanto "IE6 / 7 non supporta correttamente il pulsante di visualizzazione. Se questo è un problema, attenersi all'input" Cioè, sai che i browser cambieranno, spiegalo. In questo modo StackOverflow viene messo in pausa per sempre con soluzioni alternative IE6.
mikemaccana,

14

Mi rendo conto che questa è una vecchia domanda, ma l'ho trovata su mozilla.org e penso che sia applicabile.

Un pulsante può essere di tre tipi: invia, reimposta o pulsante. Un clic su un pulsante di invio invia i dati del modulo alla pagina Web definita dall'attributo action dell'elemento.

Un clic su un pulsante di ripristino ripristina immediatamente tutti i widget del modulo al loro valore predefinito. Dal punto di vista UX, questa è considerata una cattiva pratica.

Un clic su un pulsante non fa ... niente! Sembra sciocco, ma è incredibilmente utile creare pulsanti personalizzati con JavaScript.

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


In che modo è utile se non fa nulla?
Miele,

4
Perché puoi quindi agganciare i gestori all'evento click tramite Javascript
fonso

@Honey, ad esempio, puoi codificare a <button type="button">per far avanzare un cursore / carosello alla diapositiva successiva.
Chharvey,

11

<button>è più recente di <input type="submit">, è più semantico, facile da stilizzare e supportare HTML al suo interno.


8

Mentre le altre risposte sono ottime e rispondono alla domanda, c'è una cosa da considerare quando si usa input type="submit"e button. Con un input type="submit"non è possibile utilizzare uno pseudo elemento CSS sull'input ma è possibile per un pulsante!

Questo è uno dei motivi per usare un buttonelemento su un input quando si tratta di styling.


3

Non so se si tratta di un bug o di una funzionalità, ma c'è una differenza molto importante (almeno per alcuni casi) che ho riscontrato: <input type="submit">crea una coppia chiave-valore nella tua richiesta e <button type="submit">non lo fa. Testato su Chrome e Safari.

Pertanto, quando nel modulo sono presenti più pulsanti di invio e si desidera sapere quale è stato selezionato, non utilizzare button, utilizzare input type="submit"invece.


dalla mia esperienza è assolutamente il contrario, il pulsante passa $ _POST ["submit_name"] e l'input NON lo fa. testato su cromo. Firefox invia sempre $ _POST ["submit_name"].
Gall Annonim,

@GallAnnonim forse dipende dal tipo di documento. Perché uso sicuramente input type = submit e funziona su Chrome
Ivan Yarych,

interessante ... Ho usato <! DOCTYPE html> usando lang "pl" && codificando utf-8 se ne ricavo differenze. chrome è 58.0.3029.96
Gall Annonim,

-2

Se stai parlando <input type=button>, non invierà automaticamente il modulo

se stai parlando del <button>tag, è più recente e non si invia automaticamente in tutti i browser.

In conclusione, se si desidera che il modulo venga inviato facendo clic su in tutti i browser, utilizzare <input type="submit">


14
È possibile utilizzare <button type="submit">per inviare automaticamente i moduli.
jumpnett,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.