Sven Rautenberg: input type="submit" anhand des Namens identifizieren

Beitrag lesen

Moin!

das kann so nicht funktionieren:

  1. Das JS gehört zumindest in den Kopf der Seite, idealiter in eine eigene .js Datei

Nein, Javascript ist überall in der Seite erlaubt - entscheidend ist nur, dass zum Zeitpunkt der Codeausführung die beabsichtigten Seitenelemente schon existieren (also z.B. nicht erst später im Quelltext stehen und so beim Seitenladen noch nicht verfügbar wären).

In der dargestellten Situation ist alles geladen und wartet auf Benutzerinteraktion - da ist die Position des Javascripts absolut irrelevant.

  1. »»  if (isset($_POST['update'])) {
    Das ist PHP Code und hat in einer JS Funktion nichts zu suchen (es sei denn innerhalb von <?php ?>, aber auch das nur, wenn an der Stelle serverseitig Daten ausgegeben oder verarbeitet werden sollen (hier nicht der Fall)

Das ist offenbar der zentrale Denkfehler von Chris.

  1. Mehrere submits nix gut. Deine Funktion wird bei Click auf beide ausgeführt. Dein Formular wird bei Click auf den normalen submit aber niemals abgeschickt (wenn  das Script funktionieren würde, wegen return false)

Jedes Formular darf so viele Submit-Buttons haben, wie in den Browser passen. Das ist nicht das Problem. Entscheidend ist, dass man berücksichtigt, dass nur der geklickte Button ans name=value-Paar mit den Formulardaten mitgeschickt wird.

Auf Javascript-Seite hingegen gibts noch keine Formulardaten. Wenn man da den "richtigen" Button isolieren will, empfiehlt sich, das mit onclick direkt im Button zu tun - eventuell angereichert mit einer weiteren Verarbeitung im onsubmit. In diesem Fall aber würde es vollkommen ausreichen, das Click-Event des einen Buttons durch "return false" abzubrechen, um den Submit-Vorgang zu unterbrechen.

Lösung: Nimm anstatt des zweiten submits einen <button></button>, kannst du ja genauso aussehen lassen wie den anderen submit.

Diese Idee ändert nichts am javascriptseitigen Verhalten der Schaltflächen - aber (und das ist gravierend) es werden die Unzulänglichkeiten des IE mit diesem Formularelement eingebaut. Der IE sendet das Falsche in den Formulardaten, er baut ALLE Buttons in die Daten ein, nicht nur den geklickten, er sendet den HTML-Inhalt innerhalb von <button>, nicht den definierten value, etc... Deshalb ist von <button> zum jetzigen Stand der Technik nur abzuraten.

Darauf legst du einen onclick event, der deine Funktion aufruft. Da findet dann nur dein confirm statt und bei Bestätigung wird das Formular abgesendet. Bei Benutzung des submits wird es halt ganz normal (ohne confirm) gesendet.

Das geht auch ohne <button>...

- Sven Rautenberg

--
"Love your nation - respect the others."