Dynamicaly füllen einer combobox mit Werten aus einer Karte, basierend auf was ausgewählt, in einer anderen combobox
Ok, hier ist eine für die Java/JavaScript-gurus:
In meiner app, einem der Controller übergibt eine TreeMap, um es in den JSP. Diese Karte hat Auto-Hersteller-Namen als Schlüssel und einer Liste von Auto-Objekten als Werte. Diese Auto-Objekte sind einfache Bohnen mit dem Auto-name, id, Jahr der Herstellung, etc.
So, die Karte sieht etwas so aus (dies ist nur ein Beispiel, um zu klären, die Dinge ein bisschen):
Schlüssel: Porsche
Wert: Liste mit drei Auto-Objekte(beispielsweise 911,Carrera,Boxter mit Ihren respektablen Jahren der Produktion und ids)
Schlüssel: Fiat
Wert: Liste mit zwei Auto-Objekte(zum Beispiel, Punto und Uno)
etc...
Nun, in meiner JSP habe ich zwei comboboxes. Man sollte, erhalten Sie eine Liste der PKW-Hersteller(Schlüssel aus der map - Teil I wissen, wie zu tun), und die anderen sollte man dynamicaly ändern zur Anzeige der Namen der Autos, wenn der Benutzer wählt einen bestimmten Hersteller aus der ersten combobox. So, zum Beispiel, der Benutzer wählt einen "Porsche" in der ersten combobox, und die zweite zeigt sofort "911, Carrera, Boxter"...
Nachdem er ein paar Tage versucht, herauszufinden, wie dies zu tun, ich bin bereit, Ihre Niederlage zuzugeben. Ich habe versucht eine Menge verschiedener Dinge, aber jedes mal, wenn ich eine Wand schlagen somewehere auf dem Weg. Kann jemand empfehlen, wie sollte ich Vorgehen?
Ja, ich bin ein JavaScript-Neuling, wenn jemand eine Frage war...
EDIT: ich habe retagged diese als code-Herausforderung. Kudos, wer löst dieses ein, ohne über JavaScript-Frameworks (wie JQuery).
InformationsquelleAutor Sandman | 2008-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Liebe eine Herausforderung.
Ohne jQuery, einfach nur javascript, getestet auf Safari.
Ich möchte noch hinzufügen, dass die folgenden Bemerkungen Voraus:
- überprüfung.
das erste Skript-Knoten mit der Karte
und der Inhalt der Produzent
WÄHLEN Sie
(Safari/OS X)
styling angewendet. Ich habe schlechten Geschmack, so
es ist eh nicht zu gebrauchen.
.
es, sobald ich kann, wahrscheinlich übermorgen. Obwohl Ihre Lösung ist noch nicht fertig, ich gebe Ihnen eine Stimme, nur für die Mühe, die Sie hineingesteckt haben 🙂 Hinweis: meine Lösung geht mit einem scriptlet.
OK. Ich sollte geschrieben haben, eine JSP dynamisch generieren modelsPerManufacturer und den Hersteller WÄHLEN. mit nichts, aber die Eingabe Anzeigen. Ich werde aktualisieren, die Antwort heute Abend (es ist jetzt 7 Uhr hier).
InformationsquelleAutor extraneon
Naja, wie ich schon sagte, habe ich es endlich geschafft, es zu tun selbst, also hier ist meine Antwort...
Erhalte ich die Karte von meinem controller, wie hier (ich bin mit Spring, weiß nicht, wie das funktioniert mit anderen frameworks):
Diese sind meine combos:
Ich importiert die folgenden Klassen (einige Namen sind natürlich geändert):
Und hier ist der code, der macht die ganze harte Arbeit:
InformationsquelleAutor Sandman
Verwenden Sie Streben?
Müssen Sie einige JavaScript-Tricks (oder AJAX), um dies zu erreichen.
Was Sie würden tun müssen, ist, irgendwo im JavaScript-code (abgesehen von, wie es generiert wurde, für die minute):
Dies ist im Grunde eine Kopie von Ihrem server-side Daten-Struktur, d.h. eine Karte, sortiert nach Hersteller, jeder Wert mit einem array von Auto-Typen.
Dann im onchange-Ereignis für die Hersteller, würden Sie brauchen, um das array aus der Karte oben definiert sind, und erstellen Sie dann eine Liste mit Optionen aus. (Check-out devguru.com - es hat eine Menge nützliche Informationen über die standard-JavaScript-Objekte).
Je nachdem, wie groß Ihre Liste der Autos, obwohl, es sein könnte am besten, um die AJAX-route.
Müssten Sie zum anlegen einer neuen Steuerung, die schaute auf die Liste der Autos, die Arten gegeben, einem Hersteller und dann freuen Sie sich auf eine JSP, welche zurückgegeben JSON (es muss nicht sein, JSON, aber es funktioniert sehr gut für mich).
Dann benutzen Sie eine Bibliothek wie jQuery abrufen die Liste der Autos in Ihren onchange-Ereignis für die Liste der Hersteller. (jQuery ist ein hervorragende JavaScript-framework zu wissen - es macht die Entwicklung mit JavaScript viel einfacher. Die Dokumentation ist sehr gut).
Ich hoffe, einige, die Sinn macht?
InformationsquelleAutor
Hier ist eine Arbeits -, cut-und-paste-Antwort, die in jsp-ohne tag-Bibliotheken oder externe Abhängigkeiten zu löschen. Die Karte mit den models ist fest aber nicht die bereiten keine Probleme.
Getrennt ich diese Antwort von meiner vorherigen Antwort, da die zusätzlichen JSP-verbessert nicht die Lesbarkeit. Und im 'echten Leben' würde ich nicht belasten meine JSP mit allen eingebetteten Logik, sondern steckte es in eine Klasse irgendwo. Oder verwenden Sie tags.
Alle, die "erste" Zeug ist zu verhindern, dass superfluos "," in den generierten code. Mit einer foreach-dosn ' T geben Sie keine Kenntnisse über die Anzahl von Elementen, so überprüfen Sie für die Letzte. Sie können auch überspringen Sie den ersten-Elemente-handling und Streifen die letzten "," danach durch eine Verringerung der generator Länge von 1.
InformationsquelleAutor extraneon
Wie wäre es mit etwas wie dieses, Prototyp? Erste, wählen Sie Ihre box von Kategorien:
Dann geben Sie N verschiedene select-Boxen, jeweils eine für die sub-Kategorien:
Ihre changeCategory javascript-Funktion deaktiviert alle wählt mit der Klasse categorySelect, und dann können Sie einfach die für Ihre aktuellen Kategorie-id.
Beim ausblenden/deaktivieren, wie dies im Prototyp ist, nicht nur versteckt auf der Seite, aber es wird halten, die FORM variable " - von der Buchung. Also selbst wenn man N wählt mit der gleichen FORM Variablenname (myFormVar), nur die aktiven Beiträge.
Und ich weiß immer noch nicht, eine Möglichkeit zum abrufen der Namen von den Autos. Der name des Autos wird ein String in ein Car-Objekt ist gespeichert in einer Liste gespeichert ist, als einen Wert in einer Landkarte. Puhh... reden über komplizierte...
InformationsquelleAutor Chase Seibert
Nicht so lange her, ich dachte an etwas ähnliches.
Verwendung von jQuery und der TexoTela add-on es ist gar nicht so schwierig.
Zuerst müssen Sie eine Daten-Struktur wie die Karte oben erwähnt:
Ihre HTML Aussehen sollte vergleichbar:
Dann, Sie füllen die erste combo mit jQuery-code wie:
wo manufacturerSelected ist die callback registriert, die auf das onChange-Ereignis
Dies sollte den trick tun.
Bitte beachten Sie, dass es syntax-Fehler drin sind; ich bearbeitete meinen code entsprechend Ihren Fall und musste strip
ziemlich viel aus.
Wenn das hilft würde ich mich über ein Kommentar.
Ich könnte nicht zugelassen werden, um JQuery verwenden. Sie sind ein bisschen empfindlich, wenn es um die Einführung neuer Rahmenbedingungen in der app. Aber, wenn ich nicht bekommen kann es arbeiten andere Weise, werde ich nur haben, um meinen Chef davon zu überzeugen die business-Jungs, das ist der einzige Weg, es zu tun. Aber, das größere Problem ist immer die Karte
arbeiten in JavaScript. Habe ich schon erwähnt, dass ich immer aus einem webservice und mein controller geht es um die JSP -, so kann ich nicht nur fest in JavaScript, ich muss in der Lage sein, um anzeigen meine anzeigen auf ein JavaScript-Objekt, so dass ich es Bearbeiten es. Ich arbeite noch an meiner eigenen Lösung, aber so
wenn ich überall zu bekommen, poste ich hier die Lösung. Noch einmal, Ihr alle, danke für all die Antworten, und Entschuldigung für den langen Kommentar.
InformationsquelleAutor extraneon
Als add-on auf meinem vorherigen post; Sie können in einem script-tag in Ihre JSP, wo Sie Durchlaufen Ihre Karte. Ein Beispiel: Iteration über Karten finden Sie in Karten im Streben.
Was Sie erreichen möchten (wenn Sie nicht kümmern, über die form der Einreichung) ist glaube ich sowas wie:
Haben Sie immer noch einige superfuous "," was möchten Sie vielleicht zu vermeiden, aber ich denke, das sollte den trick tun.
InformationsquelleAutor extraneon