Dropdown Menü springt andauernd auf die erste Auswahl zurück - wie kann ich das verhindern?
Ich habe schon an mehreren Stellen nach einer Antwort gesucht, aber keiner konnte mir weiter helfen. Und zwar geht es um eine Software, die ich auf meinem Webspace verwende. Dort gibt es ein paar Dropdown Menüs mit Auswahlmöglichkeiten (Bearbeitungsbereich von einem Userprofil). Soweit, so gut. Wenn ich jetzt aber einen Punkt auswähle und auf "speichern" klicke, springt die Auswahl in dem Dropdown Menü zurück auf den ersten Punkt, sodass ich ihn auf die nächste Bearbeitung erneut auswählen muß. Das will ich aber nicht, denn auf Dauer wird das richtig nervtötend. Ich möchte, dass die zuletzt gesetzte Auswahl abgespeichert wird, sodass ich das bei der Bearbeitung nicht ständig vom neuen setzen muß.
Aber wo kann ich in der Programmierung den Befehl dafür setzen?
Bisher habe ich nur mit CSS Dropdown Menüs gearbeitet, aber soweit ich heraus gefunden habe, läuft dieses hier über JavaScript (hatte noch nie damit zu tun, ist - zumindest im Bereich Dropdown Menü - totales Neuland für mich). Dazu habe ich eine (die einzige) Datei gefunden, wo es einen Befehl dafür gibt, nur leider werde ich nicht so ganz schlau daraus. Vielleicht hat mir ja einer einen Rat dazu? Hier der Ausschnitt:
function(a){var c="dropdown",f="4.0.0",g="bs.dropdown",h="."+g,i=".data-api",j=a.fn[c],k={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,CLICK:"click"+h,CLICK_DATA_API:"click"+h+i,KEYDOWN_DATA_API:"keydown"+h+i},l={BACKDROP:"dropdown-backdrop",DISABLED:"disabled",OPEN:"open"},m={BACKDROP:".dropdown-backdrop",DATA_TOGGLE:'[data-toggle="dropdown"]',FORM_CHILD:".dropdown form",
Ich bin für jede Hilfe dankbar! Denn so langsam verzweifle ich daran.
2 Antworten
Hallo, für was verwendest du dein sogenanntest Dropdown-Menü? Wenn es sich nicht um ein Menü handeln sollte, dann würde ich zu select-Listen raten: http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select
Nun zu deinem Problem, es ist ganz logisch, dass es immer auf die erste Auswahl zurückspringt, da bei jedem Laden der Seite der Code neu ausgeführt wird und du dein Abspeichern des Menüpunkt ja nirgendwo machst. CSS wird nur für das Styling verwendet, nicht für das Speichern von Menüpunkten.
Nun hast du folgende Möglichkeiten, wie du das ganze speichern kannst, für die nächsten Sitzungen eines Benutzers:
- PHP: du speicherst das Ganze in eine Datenbank und holst dir dann deinen Wert heraus
-JS: du speicherst das Ganze in einem Cookie mit einer bestimmten Sitzungsdauer
Wenn du das Ganze mit PHP abspeicherst, dann verwendest du kein Cookie, sondern speicherst das Ganze in eine Datenbank.
Den javascript-Code, den du vorher gepostet hast, gibt für mich nicht wirklich einen Sinn, da dort nur Sachen in variablen gespeichert werden.
1. Du musst nun überprüfen, ob die Werte auch in der Datenbank korrekt hineingeschrieben werden.
2. Wenn ja, dann liegt das Problem bei der Auslesung (evtl. überprüfen, ob Fehler ausgegeben werden) und mit welchem Code das Ganze aus der Datenbank geholt wird bzw. das Result davon.
Mit dem Updaten von Sachen bzw. Versionen kann es durchaus sein, dass bestimmte Sachen davon nicht mehr kompatibel sind, wurde evtl. die PHP Version geupdated?
Die JavaScript-Funktion, die du da herausgekramt hast, wird nicht groß weiterhelfen. Sie ist unvollständig und außer Kontext. Vermutlich hat sie mit dem Dropdown-Element zu tun, doch um zu wissen, was sie genau tut, müsste man sich erst intensiv einarbeiten.
Andere Lösungswege sind da viel schneller. Du kannst das Dilemma server- oder clientseitig lösen. Am schnellsten und einfachsten geht vermutlich Lösungsvorschlag 3.
1) Kombination aus Server + Client
Nach Senden des Formulars speicherst du den Wert des Dropdown-Elements und gibst ihn weiter an die Stelle, wo es selbst gerendert wird (z.B. innerhalb eines data-Attributs). Via JavaScript liest du diese Information aus und setzt den Wert dynamisch.
2) Nur Server
Nach Senden des Formulars speicherst du den Wert der Box und da, wo die Box gerendert wird, musst du dafür Sorge tragen, dass du die Box kreierst und nicht mehr das JavaScript o.ä.. Gib das select-Element selbst aus.
3) Nur Client (mit JS)
Setze einen onchange-Event-Handler auf das Dropdown-Element, bei jeder Änderung soll der neu ausgewählte Wert in einem Cookie gespeichert werden. Beim Laden der Seite selbst wird der Cookie ausgelesen und die entsprechende Option ausgewählt. Schau im Markup, ob das Dropdown-Element ein klassisches select-Feld ist oder nicht.
Folgende Links könnten dir weiterhelfen:
- http://www.w3schools.com/js/js_cookies.asp
- http://www.w3schools.com/jsref/prop_select_selectedindex.asp
- http://stackoverflow.com/questions/5024056/how-to-pass-parameters-on-onchange-of-html-select
- Mit jQuery: http://stackoverflow.com/questions/1221957/jquery-to-retrieve-and-set-selected-option-value-of-html-select-element
- Mit jQuery: http://stackoverflow.com/questions/11179406/jquery-get-value-of-select-onchange
Vielen lieben Dank für deine Antwort :)
Mir fällt gerade auf, dass ich - vielleicht? - einen entsprechenden Punkt vergessen habe. Die Software, die ich auf meinem Webspace betreibe, ist aktuell auf der Version 6.2.1 - dieses Verhalten mit dem Dropdown-Menü hatte in den Versionen vor 6.0 noch funktioniert. Erst mit dem Einzug von 6.0 und Höher hat sich dieses Verhalten eingeschlichen und der Softwareentwickler stellt sich - ich mag mal sagen - ein bisschen quer, mir da weiter zu helfen. Deswegen will ich jetzt versuchen, dass auf eigene Faust zu lösen. Zwar habe ich etwas Ahnung, aber in Sachen Javascript bin ich noch recht unerfahren, da ich bislang eher mit reinem HTML, PHP & CSS gearbeitet habe :)
Es ist schwierig zu umschreiben. Im AdminCP lassen sich zusätzliche Felder für die Profile erstellen, wo ich selbst bestimmen kann, ob es ein reines Textfeld, oder eben dieses Dropdown-Menü sein soll (Als Typ wird "Selection" beschrieben). Das ganze wird in der Datenbank hinterlegt. Bei Ansicht des Profils wird alles richtig dargestellt, nur wenn ich anschließend das Profil bearbeiten will, sind die Dropdown-Menüs zurück auf dem ersten Punkt und ich muß alles vom neuen auswählen, um damit es später bei der Profilansicht wieder stimmt. So ganz schlicht umschrieben mag ich sagen, dass die Information im Bearbeitungsbereich während der Speicherung verloren gehen. Die Frage ist jetzt nur, an welcher Stelle ich suchen muß, da die Software an sich sehr verschachtelt ist :( Evtl. doch ein Cookie-Problem?