Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Formular mit Enter/Return abschicken

Hallo,

ich habe ein Problem, für das mir keine saubere Lösung einfällt. Wenn ich ein Formular mit Enter anstatt mit dem Submit-Button abgeschicke, wird (zumindest bei meinem Browser) der ERSTE Button im Formular mit abgeschickt. Bei aufwändigen Formularen gibt es aber mehrere Button und es hängt dann von der Anordnung ab, welcher Button abgeschickt wird.

Ein Beispiel habe ich hier erstellt: http://www.10fingers.com/formular

Gibt es denn eine saubere Lösung ohne Javascript, dass man sicherstellen kann, dass beim Abschicken mit Return ein definierter Button übertragen wird?

Gruß, Micha

Hier gehts zum Orginal Eintrag "Formular mit Enter/Return abschicken" im Forum

Antworten

Ich würde doch mal sagen, dass das der Browser regelt, oder?
Der nimmt immer den ersten, hab mich mit so nem Problem noch nie befassen müssen.


2.

Ja klar regelt das der Browser. Das Problem ist aber doch, dass ich beim Verarbeiten des Formulars nicht unterscheiden kann, ob der erste Button tatsächlich angeklickt wurde oder das Formular mit Return verschickt wurde.


3.

Was bringt den der 2 button???? brauchst du den überhaupt - wenn ja für was?


4.

Den brauche ich für alle sonstigen Formular-Aktionen, bei denen es erfolderlich ist, das ganze Formular abzuschicken um die Benutzereingaben zu erhalten. Wenn ich einen Link (GET) verwenden würde, ist ja alles weg, was der User bis dahin in das Formular eingegeben hat.

z.B. Position aus dem Warenkorb entfernen, Lieferanschrift ändern, Warenkorb neu berechnen usw.


5.

hmmm... k - dann ist klar...

vllt altanativ ne schritt für schritt methode?


6.

benutze gar keinen submit button
hatte das prob auch
habe es letztendlich mit type="button" gemacht
Du machst folgendes
- onSubmit="check_form(); return false;" in den form Tag

- OnClick="perform_action('aktion')" auf die buttons
- perform_action(action) schreibt die variable action in ein verstecktes feld, welches zusammen mit dem Formular übertragen wird (in diesem Fall "aktion").
- Außerdem ruft diese Funktion eine andere Funktion namens check_form() auf
- check_form() überprüft ob das versteckte Feld ausgefüllt ist
- Außerdem noch die beiden Sachen in check_form() rein:
document.forms[0].setAttribute('onSubmit','return true;');
document.forms[0].submit();
Das darf natürlich nur ausgeführt werden, wenn das versteckte Feld nicht leer ist. Denn:
Ist es leer, so wurde perform_action() nicht ausgeführt, was wiederum bedeutet, dass versucht wurde das Formular durch Enter drücken abzuschicken.
Somit gehst du sicher, dass die Leute auf einen der Buttons drücken und die gewünschte Aktion auch wirklich ausführen wollen.
Was du nur noch tun musst, ist im Zielskript das versteckte Feld nach der angeklickten Aktion abzufragen.

Ich hoffe du verstehst was ich meine. Ist n bisschen spät, um sich noch klar ausdrücken zu können


7.

Hallo Andsens,

danke für deine Antwort. Ich habe befürchtet, dass wohl nur mit JS geht. Verstanden habe ich das schon ;-) Nur würde ich gar nicht unterbinden wollen, dass das Formular durch Enter abgeschickt wird, insofern muss ich es etwas abwandeln. Ich will eben nur selber die Kontrolle darüber haben, WELCHE Aktion bei Enter ausgeführt wird.

Michael


8.

Hallo!

Ich habe das selbe Problem, allerdings ist mir die Lösung von Andsens zu hoch (bin Anfänger).

Meine Ausgangssituation:
ein einfaches Formular mit zwei Buttons, einer zum löschen und einer zum abschicken. Da allerdings in einige Formularfelder dynamisch Werte eingetragen werden bringt mir der standard "reset" Button nichts. Somit habe ich zwei "submit" die unterschiedlich ausgewertet werden. Es funktioniert auch einwandfrei, doch ist der erste der Buttons der zum Löschen, daher wird bei ENTER nicht abgeschickt sondern gelöscht.

Der einfachste Weg wäre den Platz zu tauschen - aus Designgründen möchte ich das aber vermeiden!

Nachdem die Seite mit dem Formular schon jetzt ein paar hundert Zeilen umfasst suche ich nach einer möglichst einfachen Lösung. Es würde mir auch schon reichen wenn der RESET Button einfach die Seite mit den Standardparametern neu aufruft, aber wie?

Wenn ich den Button mit einem Hyperlink versehe (innerhalb des Formulars) tut sich einfach nicht.

Tipps erwünscht!


9.

CSS wäre eine möglichkeit die position der buttons frei zu bestimmen. Die reihenfolge, wie die buttons im quelltext (maßgeblich für den browser) erscheinen kann so unabhängig von der optischen anordnung sein. Meiner Meinung nach eine gute alternative, wenn man auf javascript verzichten möchte.

Beispiel:
Code:                   In Zwischenablage kopieren (nur IE)
1">




10.

Da gräbt jemand die alten Threads wieder aus...

Prinzipiell funktioniert es, wenn man unterschiedliche Buttons unterschiedlich benennt. Probleme macht allerdings der IE, der beim Drücken der Enter-Taste keinen Button drückt sondern lediglich das Formular an sich abschickt. Opera und FF "drücken" erfahrungsgemäss den ersten Button nach der aktuellen Cursor-Position. Welches Verhalten nun im Sinne des W3C ist weiss ich nicht. Man muss aber damit rechnen, dass der IE wieder eine Extra-Wurst braucht. Lösung wäre dann also, dass man bei der Auswertung als Standard den ersten verfügbaren Button annimmt, falls kein Button geklickt wurde. Dieser Button ist dann natürlich der Speichern-Button. Denn wenn ich etwas abbrechen will drücke ich in einem Formular garantiert nicht Enter, da wird dann bestimmt geklickt.

@netspeedy: Warum hat ein Zurücksetzen-Button nicht den Typ "reset"?

So far...
Matthias


11.

Doppelpost, kann gelöscht werden...


12.

sorry das ich jetzt erst antworte (emails heute mal wieder gecheckt..xD)

mein Zürücksetzenbutton ist nicht vom typ reset weil er bei mir eine andere wirkung hat als der gewöhnliche reset button..
er ist "magisch" - ne scherz bei seite.. um es genau auszudrücken - die formulareingaben erstrecken sich bei mir über mehrere seiten, dabei werden diese für die dauer einer session serverseitig gespeichert. nun kann es mal sein, dass es einen fehler gab, wobei es aber sein kann, dass dieser user noch andere daten eingeben hat die ok sind und diese werden zwischengespeichert. Nun möchte man nciht unbedingt bei jedem formularfeld die daten wieder ausgeben - z.b. bei Passwortfeldern. Damit der benutzer also nciht nochal sein passwort eingeben muss werden die passwortfelder ausgeblendet. Damit der user dieses wieder anzeigen lassen kann und seine vorherige eingabe rückgängig machen kann gibt es diesen zürücksetzen-button vom typ submit - den bei reset wird das formular nicht abgeschickt.


Hier gehts zum Orginal Eintrag "Formular mit Enter/Return abschicken" im Forum
 
phpforum.de | Impressum