2010-01-24 12 views
39

Supongamos que tengo el siguiente formulario HTML:Si un formulario HTML tiene dos botones <input type = "submit">, ¿cómo sé cuál fue cliqueado?

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

¿Cómo sé qué botón hizo clic el usuario (sin necesidad de utilizar javascript)?

Miré los datos enviados y parece que cuando se hace clic en "Queue Item" se envía "queue" = "Queue Item" al servidor. Y cuando se hace clic en "Submit item", se envían "submit" = "Submit item" conjuntos.

¿Puedo confiar en este comportamiento? ¿Está documentado en alguna parte del estándar en formularios HTML? ¿Como lo hacen ustedes?

+1

Posible duplicado de [Dos botones de envío en un formulario] (http://stackoverflow.com/questions/547821/two-submit-buttons-in-one-form) –

Respuesta

49

Sí, puede confiar en esto; está completamente documentado here. Las líneas relevantes específicas dicen:

Cuando se envía un formulario para su procesamiento, algunos controles tienen su nombre emparejado con su valor actual y estos pares se envían con el formulario. Los controles para los que se envían pares de nombre/valor se llaman controles exitosos.

y

Si un formulario contiene más de un botón de envío, sólo el botón activado presentar es exitosa.

+13

Cuando el usuario pulsa el botón Intro en lugar de presionar un botón, el primer botón de enviar en un formulario será el botón activo. – Scharrels

+4

No, en realidad no puede confiar en este comportamiento.En IE6 obtendrá el valor de AMBOS botones enviados, simplemente porque es el estándar no significa que se implemente correctamente. – Erik

+0

Sh * t. ¿Qué hago entonces, Erik? – bodacydo

3

Puede confiar en este comportamiento. Obtienes el valor de la entrada. Usaría javascript para alternar un valor de formulario oculto, pero como no mencionó javascript, no tiene varias opciones.

Es un estándar. Dado que es una etiqueta input, y tiene un value, eso significa que recibe el value enviado.

4

Sí, puede confiar en ese comportamiento.

Cuando se hace clic en <input type="submit" name="queue" value="Queue item">, se establecerá el campo "cola" y no se mostrará "enviar".

Considerando que cuando se hace clic en el otro, se establecerá el campo "enviar", y "cola" no será.

Si no está seguro de esto, puede dividirlos en 2 formularios y trabajar de esa manera.

0

Divida el formulario en dos formas, replicando cualquier otra entrada que necesite la otra acción. O bien, si realmente necesita saber si el usuario desea "poner en cola frente a enviar" el elemento, cambie ambos botones de envío a selecciones de radio para alternar entre las dos opciones, y tenga un nuevo botón "enviar el formulario" por separado.

En esa situación, si desea una opción de un clic, puede usar Javascript para detectar cuándo se selecciona uno de los botones de opción y enviar automáticamente el formulario al instante. (Uso de Javascript para la interfaz de usuario, en lugar de manejo de formularios)

Cuestiones relacionadas