JSon-Array in HTML-Select-Option
so, ich bin ein echter noob wenn es um javascript.
Ich habe versucht, alle Lösungen hier auf der Seite und ich habe ein paar andere Sachen von google, aber ich habe nichts gefunden, dass für mich gearbeitet.
Ich habe ein json-array und importat, die in einer select-option-Liste. Das Ziel ist, wählen Sie Musiktitel aus einer listbox.
Hier ist mein Aktueller html-code (wenn Sie brauchen mehr von der code mir sagen, jetzt werde ich nur posten, was ich denke, ist notwendig):
<td><input id="anzahl" type="number" min="1" max="100"></td>
<td><select id="mySelect" name="Titel">
<option id="01"></option>
<option id="02"></option>
<option id="03"></option>
<option id="04"></option>
<option id="05"></option>
<option id="06"></option>
<option id="07"></option>
<option id="08"></option>
<option id="09"></option>
<option id="10"></option>
</select></td>
...
EDIT: Hier der aktualisierte code, aber es immer noch nicht funktioniert.
function initSelBox_Product() {
var titelliste= [
{"Produktid":"01","Titel":"Dangerous","Band":"David Guetta","Nettoeinzelpreis":"1.99"},
{"Produktid":"02","Titel":"Sun goes down","Band":"Robin Schulz","Nettoeinzelpreis":"1.99"},
{"Produktid":"03","Titel":"Fade out lines","Band":"The Avener","Nettoeinzelpreis":"1.99"},
{"Produktid":"04","Titel":"Walk","Band":"Kwabs","Nettoeinzelpreis":"1.99"},
{"Produktid":"05","Titel":"Blame","Band":"Calvin Harris","Nettoeinzelpreis":"1.99"},
{"Produktid":"06","Titel":"Geronimo","Band":"Sheppard","Nettoeinzelpreis":"1.99"},
{"Produktid":"07","Titel":"Animals","Band":"Maroon 5","Nettoeinzelpreis":"1.99"},
{"Produktid":"08","Titel":"What are you waiting for?","Band":"Nickelback","Nettoeinzelpreis":"1.99"},
{"Produktid":"09","Titel":"Shake it off","Band":"Taylor Swift","Nettoeinzelpreis":"1.99"},
{"Produktid":"10","Titel":"Chandelier","Band":"Sia","Nettoeinzelpreis":"1.99"} ];
for (var i = 0; i < titelliste.length; i++) {
var select = document.getElementById("mySelect");
var option = document.createElement("option");
option.text = titelliste[i].Titel;
option.value = titelliste[i].Produktid;
select.add(option);
}
}
- Hinweis: Verwenden Sie
JSON.parse(titelliste)
statteval('(' + titelliste + ')')
. - Sie tun
options[j].Text
undoptions[j].Value
. Haben Sie einen Blick auf das array. Die Objekte, die nicht diese Eigenschaften haben. - Danke, aber es hat nicht funktioniert. Aber wenn ich das richtig verstanden habe wollen Sie mich ersetzen options[j].Text mit z.B. options[j].Titel richtig?
- Ja. Sie benötigen, um die Daten von Ihrem Objekt, aber Sie benannt ist 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein paar Sachen geändert im code.
<option>
tag nicht ein "text" - Attribut. In jQuery, die Sie verwenden sollten$('.selector').text()
ändern Sie den inneren text für einen tag<select>
tag hat eine andere id-Attribut als die, die Sie angeben, in$('#mySelect').append(newOption);
(select id="select" nicht "mySelect").Hier ist eine funktionierende fiddle.
Hier ist eine Reine JavaScript-option:
JS:
HTML:
Es ist ziemlich offensichtlich aus dem code, dass Sie nicht vertraut sind mit, wie jQuery funktioniert, so würde ich empfehlen, kleben mit reinem JavaScript, bis Sie ein volles Verständnis der Sprache selbst.
Was ich hier mache ist ganz einfach:
Zuerst erstelle ich eine
for
- Schleife, um durch die einzelnen JSON-Objekte in dertitelliste
array.Dann bei jeder iteration:
select
element.option
elementtext
- Attribut des option, um dieTitel
Wert in das JSON-Objektvalue
- Attribut des option, um dieProduktid
Wert in das JSON-Objektselect
elementIch hoffe, dass dies helfen Sie verstehen ein wenig mehr über das, was im code auf.
select
zuSelect
. Ich bevorzuge alle meine ID ' s captialized.select
element direkt von ID, es spielt keine Rolle, was das element parent ist.Können Sie auch
map()
. Die parameterval
von der Funktion ist ein Objekt, das enthältProduktid
undTitel
. So können Sie diemap()
Funktion. Hier ist ein Beispiel:JS:
HTML:
Referenz:
Sich auch mit einem anderen iteration
- each()
jQuery("<option></option>").val(val.Produktid).html(val.Titel)
map()
, aber im Stil dereach()
konstruieren. In der Regel, eine Karte 'übersetzt' / gibt die Elemente in ein array oder ein Objekt in ein neues array mit Elementen, die das resultierende array aus dem Aufrufmap()
. Derzeit sind Sie nicht Rücksendung innerhalb dermap()
Funktion, sondern iterativ Gebäude der resultierende string... ein Muster ist besser geeignet für eineneach()
. </pedantisch> ich werde Bearbeiten Sie Ihre Antwort, als ich wirklich wie Sie map-basierte Lösung (und es kann verbessert werden). Es kann getestet werden, jsfiddle.net/r28Ly010.void main Antwort ist ziemlich klar und prägnant.
Gibt es keine Notwendigkeit für die Verwendung von eval, da die variable bereits ein array von Objekten.
Die select-box sollte leer sein, da du wirst Anhängen Elemente sowieso.
Hier ein jsfiddle noch mit einer javascript for-Schleife:
http://jsfiddle.net/horxu2yc/