form.submit() überträgt nicht die richtigen Werte...
j4k3
- javascript
0 j4k30 Felix Riesterer
0 j4k3
Bevor ich wahnsinnig werde, frag ich hier besser mal nach, ob mir mit diesem Problem jemand helfen kann.
Ich möchte gerne folgendes realisieren:
Im Formular auf einer Seite soll es möglich sein, alternativ zu Auswahl aus einer langen Liste einer Selectbox stattdessen eine Position aus einer Übersichtskarte auszuwählen.
Auf einen Klick auf einen zusätzlichen Button soll sich daraufhin eine Karte öffnen, in der verschiedene Positionen in einer Imagemap hinterlegt sind. Beim Klicken auf einen dieser Punkte soll sich die Übersichtskarte dann wieder schliessen, und das entsprechende Gebiet der entsprechenden Selectbox ausgewählt werden.
Der Code dazu sieht in der aufrufenden Seite wie folgt aus:
<script type="text/javascript">
function kartenAuswahl () {
// Oeffnet das Fenster mit der Kartenauswahl
fenster = window.open("/karte.html", "Kartenauswahl", "width=610, height=620, status=no, scrollbars=no, resizable=no, location=no");
fenster.focus();
}
function auswahlAendern(optionValue) {
// Aendert die Auswahl aus dem uebergebenen Wert
document.forms[1].elements[2].selectedIndex = optionValue;
}
</script>
im geöffneten Popup bekommen die einzelnen Areas dann folgende Methodenaufrufe mit:
<area coords="174,314,10" href="javascript:self.opener.auswahlAendern(8); window.close();" shape="circle" onClick>
Das funktioniert auch soweit schon wunderbar. Nun möchte ich allerdings mit einbauen, dass die Seite die Form nach einstellen der Position automatisch submittet. Und das will einfach nicht funktionieren. Wenn ich die funktion auswahlAendern um ein entsprechendes document.forms[1].submit(); erweitere, dann wird Seite zwar neu geladen, die Form also scheinbar übertragen, aber der Wert in der Selectbox ist nicht der ausgewählte. Wenn ich das Submit manuell vornehme stimmt aber alles.
Kann mir jemand erklären, was ich noch falsch mache?
Okay, hat sich erledigt, ich simuliere statt dessen einen Klick auf den Submit-button.
Ich verstehe allerdings trotzdem nicht, warum submit nicht den eingestellten Wert überträgt.
Lieber j4k3,
1.) Ich finde ein Popup an dieser Stelle nicht gut. Besser wäre ein entsprechendes Element (ich empfehle ein <p>-Element), das per CSS auf display:none gesetzt ist, und das nach der "Aktivierung" eben nicht mehr display:none, sondern display:bock bekommt. Mit weiteren CSS-Regeln lässt sich dieses Element (es muss wirklich kein <div> sein!) so gestalten, dass es wie ein Popup aussieht - es ist aber keines.
2.) Deine Funktion enthält einen Denkfehler!
document.forms[1].elements[2].selectedIndex = optionValue;
Du gibst der selectedIndex-Eigenschaft etwas, das Du in optionValue gespeichert hast. Merke: selectedIndex enthält _nicht_ den aktuell ausgewählten Wert (der im <option>-Element steht)! Es enthält einen "Zeiger" auf das entsprechende Auswahl-Element (besagtes <option>-Element). Das ist ein konzeptioneller Unterschied!
Liebe Grüße,
Felix Riesterer.
Lieber j4k3,
1.) Ich finde ein Popup an dieser Stelle nicht gut. Besser wäre ein entsprechendes Element (ich empfehle ein <p>-Element), das per CSS auf display:none gesetzt ist, und das nach der "Aktivierung" eben nicht mehr display:none, sondern display:bock bekommt. Mit weiteren CSS-Regeln lässt sich dieses Element (es muss wirklich kein <div> sein!) so gestalten, dass es wie ein Popup aussieht - es ist aber keines.
2.) Deine Funktion enthält einen Denkfehler!
document.forms[1].elements[2].selectedIndex = optionValue;
Du gibst der selectedIndex-Eigenschaft etwas, das Du in optionValue gespeichert hast. Merke: selectedIndex enthält _nicht_ den aktuell ausgewählten Wert (der im <option>-Element steht)! Es enthält einen "Zeiger" auf das entsprechende Auswahl-Element (besagtes <option>-Element). Das ist ein konzeptioneller Unterschied!
Liebe Grüße,
Felix Riesterer.
Hollerö und 'Naaah, des basst scho.'
1.) Ich hatte mir auch über alternativen zum Popup gedanken gemacht. Aber aufgrund der Größe des aufgerufenen Bildes kommt hier aber nichts anderes in Frage. Popup-Blocker der aktuellen Browser haben da auch überhaupt kein Problem mit. Die öffnen das Popup anstandslos.
2.) ...Und genau den von dir erwähnten Zeiger verbiege ich doch auch auf das Element, oder? Ich setze den selectedIndex auf das gewünschte Element und ändere nicht etwa den Text des ausgewählten.
Nochmal ausführlich: Manuell klappt das alles schon prima, wenn das Popup schliesst, ist der gewünschte Eintrag augewählt und beim manuellen Submit wird auch genau dieser Wert übertragen. Das Übertragen der Form per Script sclägt dann allerdings fehl. Es wird dann nicht mehr der per selectedIndex eingestellte Wert übertragen.
Oder habe ich das alles immer noch nicht verstanden? Was sonst muss ich denn für eine Methode auf das Select-Obkject absetzen, wenn nicht selectedIndex?
Liebe(r) j4k3,
Aber aufgrund der Größe des aufgerufenen Bildes kommt hier aber nichts anderes in Frage.
das musst Du wissen.
2.) ...Und genau den von dir erwähnten Zeiger verbiege ich doch auch auf das Element, oder? Ich setze den selectedIndex auf das gewünschte Element und ändere nicht etwa den Text des ausgewählten.
Was genau steht denn in optionValue???
Oder habe ich das alles immer noch nicht verstanden?
Im Moment hat es diesen Anschein, ja.
Liebe Grüße,
Felix Riesterer.