Javascript-Problem mit click()
Ich stehe gerade ein bisschen auf dem Schlauch. Ein Formular hat drei Submit-Buttons. Drückt man die Enter- bzw. Returntaste, wird – egal welches Formularfeld gerade den Focus hat – der erste Submit-Button ausgelöst. So weit, so gut, das ist nichts neues.
Nun hatte ich die schlaue Idee, in einem bestimmten Feld per onKeyDown-Event die Entertaste abzufangen und einen bestimmten Button mit click() auszulösen. Das klappt auch problemlos, wenn ich Submit-Buttons benutze. Ist allerdings ein input type=„image“ dabei wird die Sache merkwürdig.
Obwohl im Beispiel beim vierten Feld von oben definitiv document.testform.button4.click() angegeben wird, wird Button 2 angeklickt. Und das auch im Beispiel darunter mit button1232536.click() – den Button gibt es gar nicht. Die Position im Formular ist dabei übrigens egal. Lasse ich den onKeyDown-Handler weg, wird wie erwartet Button 1 geklickt.
Versteht jemand die Logik dahinter? Gibt es ein Verfahren, wie ich programmgesteuert einen bestimmten input type=„image“ anklicken kann?
Ähnliche Beiträge:
Liebes Tagebuch (72) Liebes Tagebuch (73)
Kommentare:
Bei den Kommentaren handelt es sich um fremde Inhalte, die sich „esse est percipi“ nicht zueigen macht. Verantwortlich für den Inhalt eines Kommentars ist der jeweilige Verfasser.
Wenn du dem Formular ein onsubmit=„return false;" dazugibst, wird dir zunächst mal auch eine Fehlermeldung ausgegeben (die sonst beim Seitenwechsel „verschluckt“ wird)
Die input[type=„image"] Elemente sind komischerweise (unlogischerweise?) nicht im DOM des Formulars enthalten, das sieht man auch, wenn man sich einmal document.testform.length ausgeben lässt. Erwarten würde man in deinem Beispiel 12, ausgegeben wird aber nur 9, die drei input[type=„image"] fehlen (getestet in FF, S).
Noch dazu gibt es die click Methode laut DOM Level 2 nur für button, checkbox, radio, reset und submit inputs:
„Simulate a mouse-click. For INPUT elements whose type attribute has one of the following values: „button", „checkbox", „radio", „reset", or „submit".“
Laurens
formRef.getElementsByTagName(„input")[index-des-buttons-].click(); sollte als workaround reichen. Alternative – und sicher leichter zu warten – wäre die Vergabe einer ID an den button (z.B.: id=„my-default") und document.getElementById(„my-default").click() ratsam.
Warum image buttons nicht im nicht-ganz-so-offiziellen-standard des form.name Baumes nicht auftauchen, entzieht sich meiner Kenntniss…
Welchen Grund gibt es, mehr als einen Submit-Button pro Formular zu haben?
Bei mir (Safari/Firefix/Mac) werden übrigens die richtigen Buttons aufgerufen.
Ich könnte mir auch vorstellen, dass der Button mit dem nächstgrössten tabindex verwendet wird für das Absenden via Enter Taste.
Just a guess :)
Michael Kaiser: Es geht um Return, nicht um Click des Buttons und das funktioniert unter Mac genauso wenig (gerade getestet). Lesen bildet. ;-)
Komische Krankheit.
Die Lösung von Björn Graf hört sich für mich am Besten an.
Sofern nichts dagegen spricht, könnte man selbiges auch mit testen.
Sorry, da wurde was verschluckt im letzten Satz:
Sofern nichts dagegen spricht, könnte man selbiges auch mit testen
Ist es unbedingt nötig, ein „click“-Event auszulösen? Es geht doch sicher um das tatsächliche Absenden des Formulars, insofern würde doch grundsätzlich ein form.submit() reichen. Oder?
Wenn man ohnehin schon einen Weg zur Unterscheidung der Semantik hat (lies: im Voraus weiß, welche Aktion der User meint), kann man kurz vor dem Submit noch den Wert des Submit-Buttons (form.submit.value = „Button 2“) anpassen und gut.
Danke, der Tipp von Martin Böhm klingt vielversprechend, werde ich ausprobieren. getElementById funktioniert übrigens nicht, da – wie Laurens erwähnte – image inputs gar nicht mit click() angesprochen werden können.
Man darf natürlich nicht den Fehler machen, den Submit-Button wirklich „submit" zu nennen… Dann würde er nämlich die form.submit()-Methode verdecken, was in diesem Zusammenhang eher kontraproduktiv ist.
Kommentar schreiben:
FAQ (Häufig gestellte Fragen)
Kommentare:
- Michael Preidel zu Pasta dell’Orto
- Stefan zu Pasta dell’Orto
- Michael Preidel zu CookieCrumble Testflight jetzt auch für macOS
- Götz zu CookieCrumble Testflight jetzt auch für macOS
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Henning zu Harbor – Sicherer Hafen [Testflight]
Schlagwörter
