molily: Formular mit vielen Buttons

Beitrag lesen

Hallo, Christoph,

Ich habe auf meiner Seite mehrere Image-Buttons und Submit-Buttons.
Nun möchte ich genau einem Submit-Button die Enter-Taste zuweisen. Aber wie ?!?

Du kannst durchaus mehrere als Submitbuttons fungierende Eingabefelder verwenden. Falls es dir um ein vollständiges Eingabeformular geht, welches beim Drücken der Return-Taste abgesendet werden soll - damit meine ich nicht das Ausführen eines JavaScripts oder ähnliches - wird dies nur in Verbindung mit einem einzeiligen Texteingabefeld, einer Checkbox oder einem Radiobutton Wirkung zeigen. Nur wenn eins dieser Formularelemente fokussiert ist (ausgewählt ist, beispielsweise durch voriges Anklicken), kann der/die BenutzerIn das Formular über die Return-Taste absenden.

Nun besteht die Frage, welcher Submitbutton beim Absenden über die Return-Taste verwendet wird - denn diese können unterschiedliche name- und value-Attribute haben, sodass die Serveranwendung, an welche die Formulardaten geschickt werden, je nach übegebenen Wert des Absendebutton unterschiedlich mit den Daten umgehen kann. Angenommen, es befinden sich mehrere Submitbuttons und ein Texteingabefeld (oder Checkbox oder Radiobutton) im aktuellen Formular, dann verhalten sich die Browser folgendermaßen beim Drücken von Return im fokussierten Texteingabefeld:
* Mozilla nimmt an, dass der erste im Quelltext des Formulars vorkommende Submitbutton gedrückt wurde. Die entsprechenden Daten in den name- und  value-Attributen dieses Submitbuttons werden mitgesendet.
* Opera 7 nimmt an, dass der erste im Quelltext des Formulars nach dem Eingabefeld vorkommende Submitbutton gedrückt wurde. Falls nach dem Texteingabefeld kein Submitbutton vorhanden ist, wird angenommen, dass der erste Submitbutton direkt vor dem Eingabefeld (somit der zuletzt definierte) Submitbutton gedrückt wurde. Die entsprechenden Daten in den name- und  value-Attributen dieses Submitbuttons werden mitgesendet.
* MSIE 6 nimmt nicht an, dass irgendein Submitbutton gedrückt wurde. Es werden keine dementsprechenden Parameter übermittelt.

Folglich ist eine Zuordnung zwischen der Return-Taste und einem bestimmten Submitbutton nicht möglich, du müsstest folglich mit JavaScript nachhelfen, sofern dies möglich ist. Mit onsubmit http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onsubmit könntest du beim Absenden den Request anhand der eingegebenen Daten selbst konstruieren (falls es sich um einen GET-Request handelt), indem du die Formularelemente einzeln abfragst http://selfhtml.teamone.de/javascript/objekte/elements.htm und manuell die Daten des gewünschten Submitbuttons in die GET-Parameter einreihst. Vielleicht lässt sich auch ein Klick auf einen speziellen Submitbutton simulieren... http://selfhtml.teamone.de/javascript/objekte/elements.htm#click.
Eine dritte Möglichkeit wäre das Abfangen aller Tastatureingaben über JavaScript-Events, beim Drücken von Enter/Return könntest du dann das Formular mit dem gewünschten Submitbutton absenden (siehe oben), das Forumsarchiv http://selfsuche.teamone.de/ berät dich diesbezüglich, beispielsweise in http://forum.de.selfhtml.org/archiv/2002/9/22721/ inklusive der darin genannten Links.
Von diesen unzuverlässigen JavaScript-Varianten rate ich dir jedoch ab, zumal ich nicht weiß, wie dein Formular aufgebaut ist. Bevor du deine Frage nicht spezifiziert hast, kann ich dazu nichts näheres sagen. Ich weiß im Grunde nicht einmal, ob es dir um im Ursprungssinn funktionsfähige GET/POST-Formulare oder um Buttons mit reiner JavaScript-Wirkung geht.

Und gibt es auch Image-Buttons ohne Submit-Funktion ?

Ja, und zwar button-Elemente mit dem Attribut type="button": http://selfhtml.teamone.de/html/formulare/klickbuttons.htm
Das type="button" macht das button-Element zu einem »push button« ohne Relevanz für das Formular (ausgenommen MSIE, der behandelt es wie ein hidden-Eingabefeld und sendet intelligenterweise den button-Elementinhalt als HTML-Code):
http://www.w3.org/TR/html401/interact/forms.html#adef-type-BUTTON
http://www.w3.org/TR/html401/interact/forms.html#buttons
Die Verwendung des button-Elements mit type="button" ist jedoch, wie beide Quellen aussagen, nur in Verbindung mit clientseitigen Scripten und nicht mit voll funktionsfähigen GET- beziehungsweise POST-Formularen sinnvoll. Da es dir anscheinend um letzteres geht, verstehe ich deine Frage nicht. <button type="button"> wird für gewöhnlich nur in Zusammenhang mit »blinden« Formularen verwendet, welches nur zur Unterbringung des button-Elements dienen, selbst aber nicht zum Versenden von Daten über GET oder POST verwendet werden können.

Grüße,
Mathias