2010-08-23 9 views
11

Ho un modulo con due pulsanti, ciascuno con onclick = this.form.submit(). Ho un campo nascosto nel modulo e vorrei che il valore del campo fosse diverso in base al pulsante su cui è stato fatto clic. Quale sarebbe il modo migliore per farlo?Passa un valore di campo nascosto in base a quale pulsante si fa clic con JavaScript

Inoltre, prima che qualcuno dica le risposte, jQuery non è un'opzione in questo caso.

+0

Se W3C ha corretto l'elemento di input/pulsante di invio, non sarebbe necessario JS o un campo nascosto. Per come stanno le cose, l'unico modo per fare ciò che vuoi senza JS è usare semplicemente un invio di immagini (assicurati di includere il testo alternativo per le persone che usano browser di solo testo o screen reader). –

risposta

12

uso Prototype :-)

A parte le battute:

  1. Aggiungi un id al campo nascosto
  2. Prima di inviare il modulo in ogni gestore:

    document.getElementById("hiddenId").value = "mySpecialValue";

    //or (depending on which onclick handler you are in)

    document.getElementById("hiddenId").value = "myOtherSpecialValue";

  3. inviare il modulo stesso modo siete ora.

ex consigliato:

<input id="buttonA" type="button" value="do something" onclick="buttonA_clickHandler(event);"/>

...

function buttonA_clickHandler(event) { 
    document.getElementById('hiddenId').value = whatever; 
    document.getElementById('theForm').submit(); 
} 

ripetere per l'altro tasto.

+4

Possiamo rendere il meme 'use prototype' prevalente su SO come quello 'use jquery'? ;) –

+0

possiamo solo sperare. – geowa4

5

Supponendo che hai la tua configurazione campo nascosto qualcosa in questo modo:

<input type="hidden" name="clicked_button" id="clicked_button" value=""/> 

si può solo impostare il suo valore in un gestore onclick comune per i pulsanti:

function buttonClick(theButton){ 
    document.getElementById('clicked_button').value = theButton.name; 
    return true; 
} 

E poi il tuo presentare i pulsanti sarebbero:

<input type="submit" name="save" value="Save" onclick="return buttonClick(this)"/> 
<input type="submit" name="delete" value="Delete" onclick="return buttonClick(this)"/> 
+0

Grazie per la soluzione pulita. – Khateeb321

1

È possibile passare il valore a cui si desidera impostare l'hidd it input per una funzione di creare:

function handleClick(val){ 
    document.getElementById('HiddenInputID').value = val; 
    return true; 
} 

e poi il codice i tasti utilizzando il onclick di passare a seconda di quale valore vuoi:

<input type="submit" name="Name1" value="Value 1" onclick="return handleClick('Value 1')"/> 
<input type="submit" name="Name2" value="Value 2" onclick="return handleClick('Value 2')"/> 
+0

Preferisco questa soluzione perché l'invio del modulo è possibile anche con JavaScript disabilitato che non è il caso con la soluzione di @ geowa4 – mxmehl

3
  1. Perdonatemi se la risposta a questa sembra ovvio, ma perché usare un campo nascosto ? <input type="submit" value="..." /> funziona già; I browser invieranno il del pulsante di invio su cui è stato fatto clic, insieme al resto del modulo dati.

  2. L'elemento <button type="submit" name="..." value="...">...</button> funziona perfettamente in Chrome/Safari/Firefox, ma non riesce a IE7 (come lesa maestà ha sottolineato nel suo commento sopra); se non si cura di su IE, sarebbe il modo di andare a go.

  3. Si potrebbe anche usare un elemento <input type="image" /> , bisogna ricordare che il browser invia come due campi: name.x e name.y. Inoltre, non puoi impostare il suo valore, ma questo non dovrebbe essere un problema se sei interessato solo alla presenza del campo .

+0

La proprietà value viene anche utilizzata per visualizzare il testo del pulsante, quindi di solito non è un buon candidato per portare dati al app. –

+0

Vero, ma a seconda del valore che l'OP vuole inviare, potrebbe comunque funzionare. Inoltre, le altre due opzioni sono ancora valide. – elo80ka

Problemi correlati