Verschillende form submit knoppen van elkaar onderscheiden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 10-10 11:37
Momenteel heb ik een website met een formulier. Onderaan dit formulier staan een aantal knoppen waaraan ik in php een actie wil koppelen. Toen ik de website een aantal jaar geleden gemaakt heb, heb ik de volgende code gebruikt :
HTML:
1
2
<input type="submit" name="SendBack" value="Subm1" onclick="sendBack(this)" />
<input type="submit" name="SendBack" value="Subm2" onclick="sendBack(this)" />


In FF en IE was het makkelijk om terug te vinden op welke van de 2 buttons geklikt was.

PHP:
1
echo 'Waarde is :'.$_REQUEST['SendBack'];


Dit heeft altijd prima gewerkt, alleen ben ik in chrome nu tegen het probleem aangelopen dat deze de waarde van de knop waarop geklikt is niet terug stuurt. $_REQUEST['SendBack'] bestaat niet.

Wat is een mooie methode om dit voor elkaar te krijgen?
Ik wil gewoon uit kunnen lezen op welke knop geklikt is, onafhankelijk van de browser.

Lost In Music


Acties:
  • 0 Henk 'm!

  • Xudonax
  • Registratie: November 2010
  • Laatst online: 07-10 13:38
Aangezien je schijnbaar JS gebruikt om de data te versturen, kun je bijv. verschillende functies per knop maken. Deze roepen dan de huidige sendBack aan met als parameter welke knop er is ingeduwd. Bijvoorbeeld:

HTML:
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
    function button1(arg) { sendBack(arg, 'button1'); }
    function button2(arg) { sendBack(arg, 'button2'); }

    function sendBack(arg, button) {
        // Do stuff
    }
</script>
... ... ...
<input type="submit" name="SendBack" value="Subm1" onclick="button1(this)" /> 
<input type="submit" name="SendBack" value="Subm2" onclick="button2(this)" />


Dan moet je wel in sendBack ervoor zorgen dat de waarde van button word meegezonden. Om te zorgen dat je serverside geen wijzigingen hoeft te doen kun je natuurlijk gewoon SendBack als variabelenaam kiezen, maar dan moet je waarschijnlijk je knop wel een andere name geven :)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Wat doet je functie sendBack precies? Bij een normaal formulier (zonder javascript tussenkomst) zou dit toch ook in Chrome gewoon moeten werken.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 10-10 11:37
Hmm, helemaal overheen gekeken. Was vanavond een beetje gaar toen ik de bug ontdekte.
(relevante) Code van sendBack is als volgt:

JavaScript:
1
2
3
4
function sendBack(owner) {  
    //Enkele "random" variabelen opslaan 
    owner.form.submit();
}


simpelste oplossing in dit geval is om variabelen die toch al verzameld worden, er een met info van de knop toe te voegen. Blijkbaar doet chrome andere dingen met een button met javascript dan andere browsers. Echter is dat niet vreemd in javascript land.
Thx voor de hulp

Lost In Music


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Als je die submit gewoon aan het formulier zelf overlaat in plaats van dat in JS te forceren dan zou je je probleem waarschijnlijk al opgelost hebben ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Sgrovert schreef op dinsdag 19 juni 2012 @ 01:53:
simpelste oplossing in dit geval is om variabelen die toch al verzameld worden, er een met info van de knop toe te voegen. Blijkbaar doet chrome andere dingen met een button met javascript dan andere browsers. Echter is dat niet vreemd in javascript land.
Je doet gewoon dingen waarvan het gedrag niet goed gedefinieerd is; vind je het gek dat je dan verschillende resultaten krijgt? Chrome is hier overigens correct; de button waarde wordt pas meegezonden wanneer de button gebruikt wordt (actief is) tijdens het submitten van het form. Dat is in jouw voorbeeld niet het geval omdat je de click op de knop afvangt en form met de hand verstuurd via de submit() functie.

Je zou niet moeten luisteren voor het click event op de individuele submit button elementen, maar voor het submit event op het form element zelf. Je hoeft dan niet je formulier met de hand te submitten, maar je kunt extra gedrag toevoegen dat moet plaatsvinden voor het formulier gesubmit wordt via het standaard browser gedrag. In dat geval zou de gebruikte button wèl gewoon bij de form waardes moeten zitten.
Pagina: 1