Tengo un formulario en el que el botón Enviar no se encuentra dentro de las etiquetas <form> . El botón de envío tiene un controlador de click para enviar el formulario a través del evento de submit() de jQuery. Esto funciona perfectamente.
Sin embargo, necesito que el valor del botón Enviar también sea POST. Dado que el botón no existe dentro de las etiquetas <form> , no se incluye en la matriz POST. Por lo tanto, necesito diseñar una forma de pasar una variable adicional cuando se envía el formulario.
Algunas estipulaciones sobre lo que no puede suceder para lograr esto incluyen:
<form> .ajax , post o get .input ocultos o botones de envío ocultos por CSS.Imaginé algo así, pero obviamente esto no funciona.
$('#admin_form').submit({'variable_name', 'true'});¿Alguien tiene alguna idea sobre cómo podría lograr esto?
Una cosa que podría hacer es usar el atributo onsubmit para que javascript inyecte un campo de publicación en el formulario con el valor del botón de envío justo cuando se envía. Tendría que hacer esto con un campo de entrada oculto, pero solo agregaría el campo de entrada justo después de que el usuario hiciera clic en el botón Enviar, por lo que el campo de entrada no existiría allí desde el principio (esperemos que esto satisfaga sus requisitos ). Entonces algo como:
function submitHandler() { submitVal = $('#submitButton').val(); $('#myForm').append("<input type='hidden' name='submitValue' value='"+ submitVal+"' />"); return true; }Lo que se mantendría en el valor adicional justo cuando se hizo clic en el botón.
Esta parece ser una vieja pregunta, pero como me encontré con un problema similar y encontré una buena solución (para mí), pensé en publicarla:
$('#admin_form').trigger('submit', [ { 'variable_name': true } ]);o
$('#admin_form').trigger('submit', [ 'variable_name', 'true' ]); dependiendo de si desea pasar una variable llamada variable_name con valor true o si desea pasar 2 variables separadas.
Y para que quede claro, por supuesto, esto no enviará automáticamente variable_name con el resto de los campos del formulario, pero si tiene un controlador de envío, como yo en jQuery, las variables se pasarán como argumentos, después del evento.
La respuesta de Jesse es la única forma de lograr esto a través de POST. También podría agregar la variable al valor de acción del formulario, pero eso sería pasar ese parámetro a través de GET en lugar de POST. Sin una entrada oculta adjunta al formulario antes de permitir la acción predeterminada de "enviar" del navegador, no hay forma de acceder a los datos de publicación sin procesar de la solicitud HTTP antes de que se envíe; es un dilema de la gallina antes del huevo: lo que está La intención de hacer es cambiar los datos/encabezados HTTP POST que se envían a la página siguiente, pero la única forma en que los datos existen antes de que el navegador publique los datos en la página siguiente es tener las etiquetas de entrada incrustadas dentro del elemento de formulario.
Una solución alternativa con la que podría optar sería utilizar la función $.post() para enviar los datos que desee a través de la publicación durante el controlador onsubmit, y en el controlador de éxito redirigir a la página que desea. Sé que esto no va de acuerdo con las reglas anteriores, pero no obstante es otra posible solución a un problema.
Sin embargo, si quieres volverte realmente loco y seguir todas tus reglas, también puedes: