Du pateikti mygtukai vienoje formoje

Turiu du formos mygtukus. Kaip nustatyti, kuris iš jų buvo paveiktas serveryje?

342
14 февр. Alexas yra nustatytas vasario 14 d 2009-02-14 00:47 '09 ne 0:47 2009-02-14 00:47
@ 17 atsakymų

Jei kiekvienam iš jų suteikiate vardą, paspaudimas bus išsiųstas kaip ir bet kuris kitas įrašas.

 <input type="submit" name="button_1" value="Click me"> 
283
14 февр. Greg atsakymas, pateiktas vasario 14 d. 2009-02-14 00:48 '09 ne 0:48 2009-02-14 00:48

Kiekvienam įėjimui galite suteikti skirtingą vertę ir išlaikyti tą patį pavadinimą:

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

Tada kode patikrinkite, kas buvo padaryta:

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

Vienintelė problema yra ta, kad susieti savo logiką su teksto įvedimu. Taip pat galite nurodyti kiekvieną unikalų pavadinimą ir paprasčiausiai patikrinti, ar yra __POST.

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

Ir kode:

 if (isset($_POST['update_button'])) { //update action } else if (isset($_POST['delete_button'])) { //delete action } else { //no button pressed } 
654
14 февр. Atsakymą pateikė „ Parrots “ vasario 14 d. 2009-02-14 00:53 '09 ne 0:53 2009-02-14 00:53

Dar geresnis sprendimas - naudoti mygtukų žymes, kad pateiktumėte formą:

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

Taigi, internacionalizacijos ir kelių kalbų kalbų nėra nepatogumų (pirmajame sprendime mygtuko etiketė taip pat yra vertė, siunčiama į serverį).

57
14 февр. atsakymą pateikė kiril 14 Vas 2014-02-14 14:31 '14, 14:31 pm 2014-02-14 14:31

Šis naujas HTML5 požiūris į šį formaction atributą:

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

Atrodo, kad tai neveikia IE9 ir anksčiau, bet kitoms naršyklėms turėtumėte būti gerai (žr. W3schools.com HTML <button> formavimo atributą ).

Asmeniškai aš dažniausiai naudoju „Javascript“, kad pateikčiau formas nuotoliniu būdu (greičiau suvokiant grįžtamąjį ryšį) su šiuo metodu kaip atsargine kopija. Tarp jų vieninteliai žmonės, kuriems netaikoma, yra IE <9 su „JavaScript“ išjungta.

Žinoma, tai gali būti netinkama, jei iš esmės atliksite tą patį veiksmą serverio pusėje, nesvarbu, koks mygtukas buvo paspaudžiamas, tačiau dažnai, jei yra du naudotojo veiksmai, tada jie bus rodomi dviem veiksmais serverio pusėje.

Redaguoti: kaip komentaruose pažymėjo Pascal_dher, šis atributas taip pat yra <input> .

39
10 авг. atsakymas, kurį Leo 10 rug. 2015-08-10 15:07 '15 , 15:07 2015-08-10 15:07

Tai labai lengva patikrinti.

 <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> 

Tiesiog įdėkite jį į HTML puslapį, spustelėkite mygtukus ir peržiūrėkite URL

23
14 февр. Peter Bailey atsakymas vasario 14 d 2009-02-14 00:51 '09 ne 0:51 2009-02-14 00:51

Galbūt siūlomi sprendimai čia veikė 2009 m., Bet aš išbandžiau visus šiuos atsakymus ir niekas nevykdo jokių naršyklių.

Tik rastas sprendimas veikia taip: (bet aš naudoju jį šiek tiek negraži, manau)

 <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';"/> 

10
05 авг. atsakymą pateikė Joakim 05 rug. 2014-08-05 14:36 '14 at 14:36 2014-08-05 14:36
 <form> <input type="submit" value="Submit to a" formaction="/submit/a"> <input type="submit" value="submit to b" formaction="/submit/b"> </form> 
8
08 нояб. atsakymas pateikiamas M1Ö 08 lapkričio. 2016-11-08 13:03 '16, 13:03 pm 2016-11-08 13:03

Geriausias būdas valdyti kelis pateikimo mygtukus yra naudoti scenarijaus serverio jungiklį.

 <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> 

serverio kodas / scenarijų serveris - kur pateikiate formą:

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; } ?> 

Šaltinis: W3Schools.com

6
05 авг. atsakymas, kurį pateikė shailesh sonare 05 rug 2016-08-05 08:34 '16 at 8:34 am 2016-08-05 08:34

RoBorg yra teisus, bet būkite atsargūs - bent IE6 ir „Firefox3“ elgiasi kitaip, kai paspausite „Enter“, kad išsiųstumėte, o ne paspaudus siuntimo mygtuką. Atrodo, kad FF3 siunčia pirmojo įvesties pavadinimo / vertės porą kartu su likusia forma, o IE6 nesiunčia jokio siuntimo įvesties.

5
14 февр. Atsakymą pateikė Pavelas Lishinas vasario 14 d. 2009-02-14 00:52 '09 0:52 val. 2009-02-14 00:52
 <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> 
3
29 июня '16 в 16:22 2016-06-29 16:22 atsakymą pateikė Osmaras Kozanas Jr birželio 16 d. 16:22 2016-06-29 16:22

Kadangi nenurodėte, kurį serverio pusės scenarijų naudojate, pateiksiu pavyzdį, kuris veikia „Python“ naudodamas „CherryPy“ (nors jis gali būti naudingas kitiems kontekstams):

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

Užuot naudoję vertę, kad nustatytumėte, kuris mygtukas buvo paspaudžiamas, galite naudoti vardą (su <button> o ne <input> ). Taigi, jei jūsų mygtukai turi tą patį tekstą, tai nesukels problemų. Visų formos elementų, įskaitant mygtukus, pavadinimai siunčiami kaip URL dalis. CherryPy, kiekvienas iš jų yra argumentas metodui, kuris vykdo serverio pusės kodą. Taigi, jei jūsų metodas turi **kwargs parametrų sąrašui (vietoj to, kad **kwargs kiekvieną kiekvieno elemento pavadinimą), galite patikrinti, kuris mygtukas buvo paspaudžiamas taip:

 if "register" in kwargs: pass #Do the register code elif "login" in kwargs: pass #Do the login code 
3
04 дек. atsakymas pateikiamas Shule 04 dec. 2015-12-04 17:36 '15, 17:36 pm 2015-12-04 17:36

Manau, kad turėtumėte turėti galimybę perskaityti savo GET masyvo pavadinimą / vertę. Manau, kad mygtukas, kuris nebuvo paspaustas, šiame sąraše nebus rodomas.

2
14 февр. Atsakymą pateikė John Bubriski vasario 14 d. 2009-02-14 00:48 '09 ne 0:48 2009-02-14 00:48

Nustatykite name kaip 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> 

Pavyzdžio serverio kodas (PHP):

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

elseif labai svarbus, nes abu bus analizuojami, jei ne. Mėgaukitės.

1
03 июля '17 в 1:48 2017-07-03 01:48 atsakymą pateikė Thielicious liepos 03 d. 17:48 1:48 2017-07-03 01:48

Taip pat galite naudoti atributą „href“ ir išsiųsti gauti pridėtinę vertę kiekvienam mygtukui. Tačiau forma nereikalinga

 href="/SubmitForm?action=delete" href="/SubmitForm?action=save" 
0
20 июля '17 в 0:15 2017-07-20 00:15 Atsakymą pateikė Jonathan Laliberte liepos 20 d. 17, 0:15 2017-07-20 00:15

Paprasčiausiai galite pakeisti formos veiksmą skirtingais siuntimo mygtukais. Spustelėkite.

Pabandykite tai dokumente. Padaryta

 $(".acceptOffer").click(function () { $("form").attr("action", "/Managers/SubdomainTransactions"); }); $(".declineOffer").click(function () { $("form").attr("action", "/Sales/SubdomainTransactions"); }); 
0
24 июня '15 в 12:34 2015-06-24 12:34 atsakymas pateikiamas Slan birželio 24 d., 15 val. 12:34 2015-06-24 12:34

Taip pat galite tai padaryti (manau, kad tai yra labai patogu, jei turite N įvestį).

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

Ir tada serverio pusėje (PHP mano pavyzdyje) galite skaityti „eilutę“ kaip masyvą, kad gautumėte indeksą:

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

$ _ POST ['row'] bus masyvas, turintis tik vieną elementą indekso => ​​reikšme (pavyzdžiui: '2' => "kažkas").

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

0
21 янв. Atsakymas pateikiamas Pato 21 sausis 2016-01-21 07:10 '16 at 7:10 2016-01-21 07:10

Galite pateikti šiuos mygtukus:

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

Tada kode galite gauti vertę naudodami:

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

(valUnits ir valPrice - kai kurios kitos vertės, kurias ištraukiu iš formos, kurią palikau iliustracijai)

-1
24 июля '15 в 12:52 2015-07-24 12:52 atsakymą pateikė vartotojo3714578 liepos 24 d., 15 val. 12:52 2015-07-24 12:52

Kiti klausimai apie žymes arba Užduoti klausimą