texto limpiar formularios formulario enviar ejemplos ejemplo despues cajas botones boton attribute html forms submit

html - limpiar - Dos botones de envío en una forma



html title attribute (18)

Tengo dos botones de enviar en un formulario. ¿Cómo puedo determinar cuál fue golpeado en el servidor?


Creo que deberías poder leer el nombre / valor en tu matriz GET. Creo que el botón en el que no se hizo clic no aparecerá en esa lista.


Definir name como array .

<form action='''' method=POST> (...) some input fields (...) <input type=submit name=submit[save] value=Save> <input type=submit name=submit[delete] value=Delete> </form>

Código de servidor de ejemplo (PHP):

if (isset($_POST["submit"])) { $sub = $_POST["submit"]; if (isset($sub["save"])) { // save something; } elseif (isset($sub["delete"])) { // delete something } }

elseif muy importante, porque ambos serán analizados si no. Disfrutar.


Esto es extremadamente fácil de probar

<form action="" method="get"> <input type="submit" name="sb" value="One"> <input type="submit" name="sb" value="Two"> <input type="submit" name="sb" value="Three"> </form>

Simplemente coloque eso en una página HTML, haga clic en los botones y mire la URL


Hay un nuevo enfoque de HTML5 para esto, el atributo de formaction :

<button type="submit" formaction="/action_one">First action</button> <button type="submit" formaction="/action_two">Second action</button>

Aparentemente esto no funciona en IE9 y versiones anteriores, pero para otros navegadores debería estar bien (vea: w3schools.com HTML <button> formaction Attribute ).

Personalmente, generalmente uso Javascript para enviar formularios de forma remota (para una respuesta percibida más rápida) con este enfoque como respaldo. Entre los dos, las únicas personas que no están cubiertas son IE <9 con Javascript desactivado.

Por supuesto, esto puede ser inapropiado si básicamente está realizando la misma acción del lado del servidor, independientemente del botón que se presionó, pero a menudo si hay dos acciones del lado del usuario disponibles, también se asignarán a dos acciones del lado del servidor.

Edición: Como lo señaló Pascal_dher en los comentarios, este atributo también está disponible en la etiqueta <input> también.


La mejor manera de lidiar con el botón de envío múltiple es usando el caso de cambio en el script del servidor

<form action="demo_form.php" method="get"> Choose your favorite subject: <button name="subject" type="submit" value="html">HTML</button> <button name="subject" type="submit" value="css">CSS</button> <button name="subject" type="submit" value="javascript">Java Script</button> <button name="subject" type="submit" value="jquery">jQuery</button> </form>

código de servidor / secuencia de comandos del servidor: donde está enviando el formulario:

demo_form.php

<?php switch($_REQUEST[''subject'']) { case ''html'': //action for html here break; case ''css'': //action for css here break; case ''javascript'': //action for javascript here break; case ''jquery'': //action for jquery here break; } ?>

Fuente: W3Schools.com


Puede asignar a cada entrada un valor diferente y mantener el mismo nombre:

<input type="submit" name="action" value="Update" /> <input type="submit" name="action" value="Delete" />

Luego en el código compruebe que se activó:

if ($_POST[''action''] == ''Update'') { //action for update here } else if ($_POST[''action''] == ''Delete'') { //action for delete } else { //invalid action! }

El único problema con eso es que vinculas tu lógica al texto dentro de la entrada. También puede dar a cada uno un nombre único y simplemente revisar $ _POST para la existencia de esa entrada:

<input type="submit" name="update_button" value="Update" /> <input type="submit" name="delete_button" value="Delete" />

Y en el código:

if (isset($_POST[''update_button''])) { //update action } else if (isset($_POST[''delete_button''])) { //delete action } else { //no button pressed }


Puedes presentar los botones así:

<input type="submit" name="typeBtn" value="BUY"> <input type="submit" name="typeBtn" value="SELL">

Y luego en el código puedes obtener el valor usando:

if request.method == ''POST'': #valUnits = request.POST.get(''unitsInput'','''') #valPrice = request.POST.get(''priceInput'','''') valType = request.POST.get(''typeBtn'','''')

(valUnits y valPrice son algunos otros valores que extraigo del formulario que dejé para ilustración)


Si le da a cada uno un nombre, el clic se enviará a través de cualquier otra entrada.

<input type="submit" name="button_1" value="Click me">


Si tiene dos botones de envío con una función diferente, entonces indique explícitamente los botones de entrada con el tipo de envío como:

<input type="submit" click="save()" name="saveBtn" value="save"> <input type="submit" click="update()" name="updateBtn" value="update">

No necesita preocuparse por qué botón se llama en el lado del servidor. Escribe tu lógica en cada función por separado y llámalos. Harán su trabajo sin interferir con los demás.


Simple puede cambiar la acción de formulario en diferentes botones de envío Haga clic.

Prueba esto en el documento.

$(".acceptOffer").click(function () { $("form").attr("action", "/Managers/SubdomainTransactions"); }); $(".declineOffer").click(function () { $("form").attr("action", "/Sales/SubdomainTransactions"); });


Tal vez las soluciones sugeridas aquí funcionaron en 2009, pero he probado todas estas respuestas y nadie está trabajando en ningún navegador.

La única solución que encontré que funciona es la siguiente: (pero creo que es un poco desagradable de usar)

<form method="post" name="form"> <input type="submit" value="dosomething" onclick="javascript: form.action=''actionurl1'';"/> <input type="submit" value="dosomethingelse" onclick="javascript: form.action=''actionurl2'';"/>


También puede usar un atributo href y enviar un get con el valor agregado para cada botón. Pero la forma no sería necesaria entonces.

href="/SubmitForm?action=delete" href="/SubmitForm?action=save"


También puedes hacerlo de esta manera (creo que es muy conveniente si tienes N entradas).

<input type="submit" name="row[1]" value="something"> <input type="submit" name="row[2]" value="something"> <input type="submit" name="row[3]" value="something">

Y luego en el lado del servidor (PHP en mi ejemplo) puede leer "fila" como una matriz para obtener el índice:

$index = key($_POST[''row'']);

$ _POST [''fila''] será una matriz con solo un elemento, en la forma índice => valor (por ejemplo: ''2'' => ''algo ").

http://php.net/manual/en/function.key.php


Una solución aún mejor consiste en utilizar etiquetas de botones para enviar el formulario:

<form> ... <button type="submit" name="action" value="update">Update</button> <button type="submit" name="action" value="delete">Delete</button> </form>

De esta manera no hay inconvenientes con la internacionalización y múltiples idiomas de visualización (en la solución anterior, la etiqueta del botón también es el valor enviado al servidor).


Ya que no especificó qué método de scripting del lado del servidor está usando, le daré un ejemplo que funciona para Python, usando CherryPy (aunque también puede ser útil para otros contextos):

<button type="submit" name="register">Create a new account</button> <button type="submit" name="login">Log into your account</button>

En lugar de usar el valor para determinar qué botón se presionó, puede usar el nombre (con la etiqueta <button> lugar de <input> ). De esa manera, si sus botones tienen el mismo texto, no causará problemas. Los nombres de todos los elementos de formulario, incluidos los botones, se envían como parte de la URL. En CherryPy, cada uno de ellos es un argumento para un método que hace el código del lado del servidor. Por lo tanto, si su método solo tiene **kwargs para su lista de parámetros (en lugar de escribir tediosamente cada nombre de cada elemento del formulario), puede verificar qué botón se presionó así:

if "register" in kwargs: pass #Do the register code elif "login" in kwargs: pass #Do the login code


usar el atributo HTML de formulación

<form action="/action_page.php" method="get"> First name: <input type="text" name="fname"><br> Last name: <input type="text" name="lname"><br> <button type="submit">Submit</button><br> <button type="submit" formaction="/action_page2.php">Submit to another page</button> </form>


<form method="post"> <input type="hidden" name="id" value="''.$id.''" readonly="readonly"/>''; //any value to post PHP <input type=''submit'' name=''update'' value=''update'' formAction=''updateCars.php''/> <input type=''submit'' name=''delete'' value=''delete'' formAction=''sqlDelete.php''/> </form>


<form> <input type="submit" value="Submit to a" formaction="/submit/a"> <input type="submit" value="submit to b" formaction="/submit/b"> </form>