<button> workaround im IE?
Steffen
- browser
0 Eternius0 ziegenmelker0 fireeye0 Frederik0 ziegenmelker1 wahsaga
0 MudGuard
hallo!
mein freund IE ist mal wieder im weg. ich habe folgenden code:
<button type="submit" name="a_bestaetigung" value="a_bestaetigt">Daten eintragen</button>
<button type="submit" name="a_bestaetigung" value="a_korrektur">Daten korrigieren</button>
ALLE browser übertragen den inhalt von "value" an den server, nur der IE überträgt die Inhalte _zwischen_ den tags.
da M$ dieses verhalten ja als "feature" statt als bug betrachtet, habe ich mein PHP-skript angepasst und habe inzwischen auch "Daten eintragen" bzw. "korrigieren" in meine if-abrage eingebaut. blöd nur, dass der IE beide werte überträgt, und zwar unabhängig davon, welchen der beiden knöpfe ich gedrückt habe.
hat jemand eine idee?
hallo,
warum nimmst du nicht <input type="submit" ../>
?
Hallo,
<button type="submit" name="a_bestaetigung" value="a_bestaetigt">Daten eintragen</button>
<button type="submit" name="a_bestaetigung" value="a_korrektur">Daten korrigieren</button>
-------------------------------^^^^^^^^^^^^^^
du solltest dem zweiten Button das Attribut name="a_korrektur" geben, möglicherweise bekommst du dann differenzierte Ergebnisse.
blöd nur, dass der IE beide werte überträgt, und zwar unabhängig davon, welchen der beiden knöpfe ich gedrückt habe.
Das sollte nach der Korrektur nicht mehr passieren.
cu,
ziegenmelker
Hallo,
<button type="submit" name="a_bestaetigung" value="a_bestaetigt">Daten eintragen</button>
<button type="submit" name="a_bestaetigung" value="a_korrektur">Daten korrigieren</button>
-------------------------------^^^^^^^^^^^^^^
du solltest dem zweiten Button das Attribut name="a_korrektur" geben, möglicherweise bekommst du dann differenzierte Ergebnisse.blöd nur, dass der IE beide werte überträgt, und zwar unabhängig davon, welchen der beiden knöpfe ich gedrückt habe.
Das sollte nach der Korrektur nicht mehr passieren.
cu,
ziegenmelker
Klar doch, das Attribut NAME hat in etwa die gleich Wirkung wie ID und zwei Elemente mit gleichem Namen oder ID schaffen Verwirrung...:-)
Gruß f
Klar doch, das Attribut NAME hat in etwa die gleich Wirkung wie ID und zwei Elemente mit gleichem Namen oder ID schaffen Verwirrung...:-)
??? Also, ich hab das aber anders gelernt... Die ID ist doch gerade eindeutig, während name durchaus mehrfach vorkommen darf bzw. sogar sollte (man denke nur an radio-buttons)...
LG
Fredo
Hallo,
??? Also, ich hab das aber anders gelernt... Die ID ist doch gerade eindeutig, ...
richtig, sie _muß_ eindeutig vergeben sein.
... während name durchaus mehrfach vorkommen darf bzw. sogar sollte (man denke nur an radio-buttons)...
Das einheitliche name-Attribut bei Input Elementen vom Typ radio dient zur Gruppierung. Nur ein Radiobutton kann selektiert werden, so daß z.B. in nachfolgenden CGI-Scripts eine Auswertung erfolgen kann.
Genau deshalb sollte hier das Name-Attribut der zwei Submit-Buttons eben unterschiedlich sein, sonst überschreiben sich gegebenenfalls die Name/Value-Paare.
Stell dir vor, du hast 3 Input-Elemente mit demselben name-Attribut, aber mit verschiedenem Value in einer Form.
Wie soll denn eine serverseitige Software diese übermittelten Input-Elemente auslesen?
Nun, sie kann es nicht, denn die name/value-Paare überschreiben sich gegenseitig, es sei denn die Browser würde vor dem Versenden ein Array aus diesen gleichnahmigen Elementen konstruieren, aber das wäre mir definitiv neu.
Siehe:
http://de.selfhtml.org/html/formulare/auswahl.htm#radiobuttons
http://www.w3.org/TR/html401/interact/forms.html#control-name
cu,
ziegenmelker
hi,
Stell dir vor, du hast 3 Input-Elemente mit demselben name-Attribut, aber mit verschiedenem Value in einer Form.
dann wird daraus beim übertragen (hier mal beispielsweise per GET):
?name=value&name=value&name=value
Wie soll denn eine serverseitige Software diese übermittelten Input-Elemente auslesen?
so, wie sie alles andere auch "ausliest".
Nun, sie kann es nicht, denn die name/value-Paare überschreiben sich gegenseitig,
nein, tun sie nicht.
PHP beispielsweise ist allerdings in der tat zu blöd, um obigen query string korrekt zu interpretieren, und liefert dann nur das letzte name/value-paar.
es sei denn die Browser würde vor dem Versenden ein Array aus diesen gleichnahmigen Elementen konstruieren, aber das wäre mir definitiv neu.
ja, deshalb sollte man, so man vorhat so etwas mit PHP auszuwerten, selber für die erstellung eines array sorgen: in dem man die felder mit name="name[]" benennt. das kapiert jetzt auch PHP ...
gruß,
wahsaga
Hallo wahsaga,
Stell dir vor, du hast 3 Input-Elemente mit demselben name-Attribut, aber mit verschiedenem Value in einer Form.
dann wird daraus beim übertragen (hier mal beispielsweise per GET):
?name=value&name=value&name=value
du hast, wie meistens, Recht. :-)
Wie soll denn eine serverseitige Software diese übermittelten Input-Elemente auslesen?
so, wie sie alles andere auch "ausliest".
Nun, sie kann es nicht, denn die name/value-Paare überschreiben sich gegenseitig,
nein, tun sie nicht.
PHP beispielsweise ist allerdings in der tat zu blöd, um obigen query string korrekt zu interpretieren, und liefert dann nur das letzte name/value-paar.
PHP generiert einen Hash, dadurch überschreiben sich die Wertepaare. Der Mozilla übermittelt jedoch im Gegensatz zum IE nur das name/value-Paar desjenigen submit-Buttons, welcher auch geklickt wurde.
es sei denn die Browser würde vor dem Versenden ein Array aus diesen gleichnahmigen Elementen konstruieren, aber das wäre mir definitiv neu.
ja, deshalb sollte man, so man vorhat so etwas mit PHP auszuwerten, selber für die erstellung eines array sorgen: in dem man die felder mit name="name[]" benennt. das kapiert jetzt auch PHP ...
Das habe ich eben mal getestet, klappt prima. ;-)
cu,
ziegenmelker
Hi,
Das sollte nach der Korrektur nicht mehr passieren.
Das sollte überhaupt nicht geschehen. Denn HTML legt fest, daß nur die Name-Value-Pärchen von "successful controls" übertragen werden dürfen - und bei mehreren Submit-Buttons legt HTML fest, daß nur derjenige "successful" sein kann, der tatsächlich zum Abschicken des Formulars benutzt wurde.
IE überträgt aber immer alle name-value-Pärchen von button-Elementen.
==> button ist für IE praktisch nur dann verwendbar, wenn man die name-value-Pärchen der buttons nicht braucht.
Und es gibt noch mehr nette Effekte mit button-Elementen im IE:
mehrere button ohne type-Attribut funktionieren als submit-button (submit ist default für das type-Attribut des button-Elements).
Füge ich einen weiteren button hinzu, gebe nur diesem neuen Button type="button" mit, funktioniert keiner der bisherigen submit-buttons mehr - es sei denn, ich geb ihnen explizit das type="submit" ...
cu,
Andreas
Hallo,
IE überträgt aber immer alle name-value-Pärchen von button-Elementen.
ja, das habe ich mittlerweile auch schon gemerkt. Mein Post heute Nacht war doch mehr eine optimistische Spekulation.
Wenn der OP die Submits definitiv mit Buttons verwirklichen will/muß, wird er wohl nicht umhinkommen, das gewünschte Ergebnis mit JavaScript zu verwirklichen. 2 Buttons mit onclick-event, welche vor dem submit das target der Form manipulieren, oder ein input vom type hidden so beschreiben, daß bei der Auswertung der Form der Absendebutton eindeutig bestimmt werden kann.
Und es gibt noch mehr nette Effekte mit button-Elementen im IE:
mehrere button ohne type-Attribut funktionieren als submit-button (submit ist default für das type-Attribut des button-Elements).
Füge ich einen weiteren button hinzu, gebe nur diesem neuen Button type="button" mit, funktioniert keiner der bisherigen submit-buttons mehr - es sei denn, ich geb ihnen explizit das type="submit" ...
Dieser Browser ist ein Graus.
cu,
ziegenmelker