2010-01-24 4 views
39

Supponiamo che io ho il seguente form HTML:Se un modulo HTML ha due pulsanti <input type = "submit">, come faccio a sapere chi ha fatto clic?

<form> 
... 
<input type="submit" name="queue" value="Queue item"> 
<input type="submit" name="submit" value="Submit item"> 
</form> 

Come faccio a sapere quale pulsante premuto dall'utente (senza l'utilizzo di javascript)?

Ho esaminato i dati inviati e sembra che quando si fa clic su "Queue Item", venga inviato al server "queue" = "Queue Item". E quando si fa clic su "Submit item", vengono inviati i set "submit" = "Submit item".

Posso fare affidamento su questo comportamento? È documentato da qualche parte nello standard sui moduli HTML? Come fate voi ragazzi a farlo?

+1

Possibile duplicato di [Due pulsanti di invio in un unico modulo] (http://stackoverflow.com/questions/547821/two-submit-buttons-in-one-form –

risposta

49

Sì, ci si può fidare di questo; è completamente documentato here. Le linee specifiche pertinenti dicono:

Quando un modulo viene inoltrato per l'elaborazione, alcuni controlli hanno il loro nome abbinato al loro valore corrente e queste coppie vengono inviate con il modulo. I controlli per i quali vengono inviate coppie nome/valore sono chiamati controlli riusciti.

e

Se un modulo contiene più di un pulsante di invio, solo il pulsante attivato presentare è successo.

+13

Quando l'utente preme il tasto Invio invece di premere un pulsante, il primo pulsante di invio su un modulo sarà il pulsante attivo. – Scharrels

+4

No, non puoi realmente fare affidamento su questo comportamento.In IE6 otterrai il valore dei pulsanti ENTRAMBI inviati - solo perché lo standard non significa che sia implementato correttamente. – Erik

+0

Sh * t. Che cosa faccio allora, Erik? – bodacydo

3

È possibile fare affidamento su questo comportamento. Ottieni il valore dell'input. Vorrei utilizzare javascript per attivare un valore nascosto del modulo, ma poiché non hai menzionato lo javascript non hai più scelte.

È uno standard. Poiché si tratta di un tag input e ha un valore value, significa che è stato inviato value.

4

Sì, puoi fare affidamento su questo comportamento.

Quando si fa clic su <input type="submit" name="queue" value="Queue item">, il campo "coda" verrà impostato e "Invia" non lo sarà.

Considerando che quando l'altro viene cliccato, il campo "invia" verrà impostato e "coda" non lo sarà.

Se non si è certi di ciò, è possibile dividerli in 2 moduli e lavorarci sopra in questo modo.

0

Suddividere il modulo in due forme, replicando qualsiasi altro input richiesto dall'altra azione. Oppure, se hai solo bisogno di sapere se l'utente desidera "accodare o inviare" l'elemento, modifica entrambi i pulsanti di invio alle selezioni radio per alternare tra le due opzioni e avere un nuovo pulsante "invia il modulo" separato.

In questa situazione se si desidera un'opzione con un clic, è possibile utilizzare Javascript per rilevare quando uno dei pulsanti di opzione è selezionato e inviare automaticamente il modulo all'istante. (Utilizzo di Javascript per l'interfaccia utente, piuttosto che la gestione della forma)