2013-05-15 10 views
6

Si consideri il seguente modulo in un documento HTML5:Modulo HTML, pulsanti di invio multipli, payload post ignora i pulsanti non cliccati: questo comportamento standard è?

<form method="post" action="http://example.com/submit/"> 
    <button name="confirm" value="1" type="submit">Confirm</button> 
    <button name="re-send" value="1" type="submit">Re-send code</button> 
    <button name="cancel" value="1" type="submit">Cancel change</button> 
</form> 

Utilizzando Chrome, cliccando sul primo pulsante produce una richiesta di carico utile di confirm=1. Analogamente, il secondo pulsante risulta in re-send=1 e il terzo cancel=1.

Esaminando il payload della richiesta lato server è possibile determinare quale dei tre pulsanti è stato selezionato (presupponendo che solo una delle tre chiavi sia presente nel carico utile della richiesta).

In tutti i casi, la chiave: coppie di valori dei pulsanti non cliccati sono escluse dal carico utile della richiesta. Questo è molto utile.

Questo comportamento (tasto tasto non premuto: coppie di valori sono esclusi dal carico di richiesta) standard?

risposta

1

Per quanto ne so, si.

Da HTML4 spec: http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.13.2

Ogni controllo di successo ha il suo nome di controllo in coppia con il suo valore attuale, come parte del set di dati del modulo presentato. ... Se un modulo contiene più di un pulsante di invio, solo il pulsante di invio attivato ha esito positivo.

Da HTML5 spec: http://www.w3.org/TR/2012/CR-html5-20121217/forms.html#the-button-element

Nota: il tasto A (e il suo valore) è incluso solo nella presentazione modulo se il pulsante stesso è stato utilizzato per avviare la presentazione modulo.

Sono abbastanza sicuro < IE8 presenterà il contenuto degli elementi invece di valore (ad esempio conferma = Conferma), ma la maggior parte degli altri browser comuni dovrebbero funzionare correttamente.

forse prendere in considerazione:

<form method="post" action="http://example.com/submit/"> 
    <button name="submit-action" value="confirm" type="submit">Confirm</button> 
    <button name="submit-action" value="re-send code" type="submit">Re-send code</button> 
    <button name="submit-action" value="cancel change" type="submit">Cancel change</button> 
</form> 

Inoltre, vale la pena notare che alcuni browser meno recenti possono avere scenerios dove potrebbero trattarla come se nessun pulsante è stato cliccato (ad esempio formulario presentato dal javascript o ENTER invece). Potrebbe valere la pena di provvedere a questo in base alla "conferma" predefinita. HTML5 sui browser moderni non dovrebbe darti alcun problema, però.

Problemi correlati