2016-06-13 19 views
9

Dire, ho un modulo con un input di testo e un pulsante di invio.Perché viene fatto clic su un pulsante quando viene inviato un modulo?

Se nel modulo non sono presenti pulsanti, è sufficiente inviare i trigger di evento, ma se è presente almeno un pulsante senza attributo di tipo o con type="submit", fa clic anche su questo.

Ora, quando inserisco qualcosa nell'input e poi premere Invio, vedo che entrambi i clic sui pulsanti e gli eventi di invio del modulo vengono attivati.

Esempio:

<form> 
 
    <input type="text" /> 
 
    <button onclick="alert('submitted');">Submit</button> 
 
</form>

suppongo la forma fa clic sul pulsante automaticamente sul modulo presentare evento.

Mi chiedo le origini e il motivo di tale comportamento? Perché ho bisogno che il pulsante venga cliccato quando invio il modulo?

+2

Possibile duplicato di [Fare clic su evento sul pulsante viene attivato quando si invia un modulo con invio] (http://stackoverflow.com/questions/11760030/click-event-on-button-is-trigged-when-submitting-a -form-with-enter) –

+3

Non è, in realtà mi chiedo il motivo, non su come risolvere questo comportamento. –

+0

Leggi il secondo commento della risposta. –

risposta

8

From the spec:

4.10.22.2 Implicit submission

Se l'user agent supporta consentendo all'utente di inviare un modulo in modo implicito (ad esempio, su alcune piattaforme di colpire il tasto "Enter", mentre un campo di testo è focalizzato implicitamente invia il modulo), quindi farlo per una forma il cui pulsante predefinito ha un comportamento di attivazione definito deve far sì che lo user agent esegua passi di attivazione clic sintetici su quel pulsante predefinito.

6.3 [synthetic click] Activation

Certi elementi in HTML hanno un comportamento di attivazione, il che significa che l'utente possa attivare. Ciò innesca una sequenza di eventi che dipende dal meccanismo di attivazione e che normalmente culmina in un evento click, come descritto di seguito.

L'agente utente deve consentire all'utente di attivare manualmente elementi con un comportamento di attivazione, ad esempio utilizzando la tastiera o l'input vocale o tramite clic del mouse. Quando l'utente attiva un elemento con un comportamento di attivazione definito in un modo diverso dal fare clic su di esso, l'azione predefinita dell'evento di interazione deve essere l'esecuzione di passaggi di attivazione clic sintetici sull'elemento.

See full script here


Quindi premendo Enter viene elaborato come dicendo submit nel microfono (con un dispositivo di input vocale). Il browser dovrebbe comportarsi come se l'utente avesse fatto clic sul pulsante per elaborare correttamente le funzioni associate all'evento di clic e migliorare l'accessibilità per coloro che non possono utilizzare un mouse.

+0

@SergeiBasharov è abbastanza chiaro per te o hai altre domande? –

-2

In realtà non viene premuto automaticamente il pulsante, non è ciò che invia il modulo. Il modulo è stato inviato perché è una caratteristica di default delle caselle di testo - se hai il focus nella casella di testo, premendo il tasto invio causerà un tentativo di inviare il modulo. Questo articolo va in una spiegazione più profonda: https://www.tjvantoll.com/2013/01/01/enter-should-submit-forms-stop-messing-with-that/

EDIT: In realtà, più in particolare, una forma presenterà solo sul tasto entrare se: 1) Un sostengono esiste pulsante nel modulo, o 2) La forma unica contiene un ingresso di testo

Se nessuna di queste condizioni è vero, allora il tasto Invio non deve inviare il modulo

Problemi correlati