Antwort an „Rolf B“ verfassen

Hallo Andreas,

nicht abschalten, ich gehe jetzt scheinbar auf eine Tangente, aber ich denke, dass es relevant für Dich ist. Deine eigentliche Frage mag beantwortbar sein, aber ich glaube, dass eine mögliche Lösung viele versteckte Komplexitäten besitzt und nicht der ideale Weg ist.

<input type="submit"> ist ein Submit-Button, d.h. das Formular wird zum Server gesendet. Diesem Button gibst Du einen click-Handler, der einem anderen input-Feld einen Wert zuweist. Da Du das Defaultverhalten des Buttons nicht abstellst, wird der Submit danach ausgeführt und der zugewiesene Wert geht sofort zum Server.

Das ganze ergibt nur dann einen Sinn, wenn Du mehr als einen Submit-Button hast. Ist das so?

Die eigentliche Frage, die ich mir stelle, ist, ob Du hierfür überhaupt clientseitig etwas tun musst. Wenn Du möchtest, dass beim Klick auf einen bestimmten Submit-Button ein bestimmtes Datenelement auf einen vorgegebenen Wert gesetzt wird, dann gib dem Submit-Button einen passenden name und value, frage serverseitig ab, ob das gePOSTet wurde (sprich: ob das Formular mit diesem Button abgeschickt wurde) und setze dann den gewünschten Vorgabewert serverseitig.

Wenn das nicht geht, d.h. wenn Du beim POST nicht mehr weißt, was im vorigen Request als $bemerkung ermittelt wurde, gibt es zwei Alternativen ohne JavaScript

  • verwende ein input type="hidden" um diesen Wert am Client zwischenzuspeichern ("ViewState")
  • Speichere den Wert in der PHP $_SESSION zwischen

Und wenn Du UNBEDINGT den Bemerkungstext im Submit-Button speichern willst, dann würde ich zu einem data-Attribut raten, um das PHP/JS Escaping zu vermeiden. Bei der Gelegenheit würde ich dann auch gleich von einem <input type="submit"> zu einem Button-Element wechseln. Ohne type-Attribut ist <button> automatisch ein Submit-Button. Vorteil von Button ist, dass angezeigter Text und Inhalt des value-Attributs nicht gleich sein müssen. Und das macht man in PHP dann auch nicht mit ECHO, sondern mit vorübergehendem Verlassen des PHP Modus - je nach Editor führt das zu deutlich erfreulicherem Syntaxhighlighting. Dann musst Du auch nicht jedes " escapen.

   ...PHP-Code...
?>
<button data-remark="<?= htmlspecialchars($bemerkung) ?>"
    onclick="einsetzen(this)">Absenden mit Bemerkung</button>
<?php
   ...mehr PHP Code...

Natürlich muss man nicht für jedes HTML Element umschalten. In vielen Fällen kann man große Teile des Formulars im HTML-Modus ausgeben und nur gelegentlich mit dem Short Echo Tag <?= ?> aus PHP benötigte Variablenwerte abrufen.

Die Einsetzen-Funktion im JS-Teil sieht dann so aus:

function einsetzen(button) {
   document.myform.myInputField.value = button.dataset.remark;
}

Beim Auswerten eines on...-Attributs enthält this das HTML-Elementobjekt, für das das Event gefeuert wird. Dieses this übergebe ich an die einsetzen-Funktion und nehme es im Parameter button entgegen. Die dataset-Eigenschaft des Elementobjekts zum Button enthält die Werte aller data-Attribute.

Etwas, was Du Dir auch anschauen solltest, ist Unobtrusive JavaScript (unaufdringliches JavaScript). Die on-Attribute vermeidet man heute eigentlich, statt dessen registriert man im Script den Eventhandler mit addEventListener

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen