Gett mig på en HTML-projekt som inkluderar Javascript på en nivå som ligger aningen ovanför min kunskapsnivå, men jag ger mig FAN inte Skulle gärna uppskatta lite kritik och input för att komma loss.
Jag gör ett HTML-formulär, med 4-5 dropdown menyer, i ordning uppifrån och ner, som alla ska vara dynamiska. Dvs val-alternativen som nästa dropdown meny i ordningen ska fyllas med, ska bero på valet man gjorde i den föregående dropdown menyn.
Jag har gjort ett JS script, en array-struktur, som lagrar alla alternativen för alla dropdown-menyer. Tanken är sen att jag ska hämta ut värdena ur arrayen och befolka dropdown-menyerna med det.
Array strukturen ser ut såhär:
Som synes, så är 3 första array-nivåerna avskilda poster som är lättare att hämta ut. Men 4e dropdown nivån har flera värden i rad. Därför använder jag en loop för att läsa av alla dessa, och fylla upp sista 4e dropdownen med dom.
HTML-formen ser ut typ såhär:
Men jag börjar med att definiera variabler och sen hämta ut dom 3 första nivåerna:
Men sen får jag fan inte till loopen på 4e nivån! DET, är mitt problem. Jag är som sagt inte så skarp på JS, så jag skulle gärna uppskatta lite tips.
Hittills har jag gjort såhär:
Jag är lite osäker på om det kanske är deklarationen av variabeln "z" som är felet? Att jag har BÅDE [first.value] och [this.value] i variabeln? Skulle kanske ha bara en av dom? eller ska jag definiera z-variabeln så att loopen enbart ska läsa av 4e nivån? alltså [third.value][this.value]? Jag tycker jag har provat det och .. ingenting funkar, blir "undefined" som svar jämt. Borde man formulera om hela loopen kanske?
Lite lost här, skulle uppskatta hjälp av mer lärda, vad jag gör för fel i sista loopen?
Tack så mycket på förhand
PS. antalet curly-parenteser kan vara lite off i inklistrade koden ovan, DET är inte problemet .DS
Jag gör ett HTML-formulär, med 4-5 dropdown menyer, i ordning uppifrån och ner, som alla ska vara dynamiska. Dvs val-alternativen som nästa dropdown meny i ordningen ska fyllas med, ska bero på valet man gjorde i den föregående dropdown menyn.
Jag har gjort ett JS script, en array-struktur, som lagrar alla alternativen för alla dropdown-menyer. Tanken är sen att jag ska hämta ut värdena ur arrayen och befolka dropdown-menyerna med det.
Array strukturen ser ut såhär:
Kod:
osv osv.var subjectObject = { "1a dropdown val A": { "2a dropdown val A": { "3e dropdown val A": ["4e dropdown val A", "4e dropdown val B", "4e dropdown val C"] }, "2a dropdown val B": { "3e dropdown val A": ["4e dropdown val B", "4e dropdown val C", "4e dropdown val D"] }, "2a dropdown val C": { "3e dropdown val C": ["4e dropdown val E", "4e dropdown val B"] }, "2a dropdown val D": { "3e dropdown val C": ["4e dropdown val A", "4e dropdown val F"] } }, "1a dropdown val B": { "2a dropdown val A": { "3e dropdown val E": ["4e dropdown val E", "4e dropdown val F", "4e dropdown val B"] }, "2a dropdown val B": { "3e dropdown val E": ["4e dropdown val C", "4e dropdown val E"] } } }
Som synes, så är 3 första array-nivåerna avskilda poster som är lättare att hämta ut. Men 4e dropdown nivån har flera värden i rad. Därför använder jag en loop för att läsa av alla dessa, och fylla upp sista 4e dropdownen med dom.
HTML-formen ser ut typ såhär:
Kod:
.. det är där jag har ID "first", "second", "third" osv som jag använder i koden nedan.<select id="first"> <option value=""> Select Option </option> </select> <select id="second"> <option value=""> Select Option </option> </select> <select id="third"> <option value=""> Select Option </option> </select> <select id="fourth"> <option value=""> Select Option </option> </select>
Men jag börjar med att definiera variabler och sen hämta ut dom 3 första nivåerna:
Kod:
osv osv, samma sak för senare nivåer. Jag använder valda alternativet, HTML-formulärets ID "first" eller "second", som utgångspunkt för vad scriptet ska hämta ut för nästa underliggande nivå.window.onload = function () { var first = document.getElementById('first') var second = document.getElementById('second') var third = document.getElementById('third') var fourth = document.getElementById('fourth') for (var x in subjectObject) { // console.log(x); first.options[first.options.length] = new Option(x) } first.onchange = function () { second.length = 1 third.length = 1 for (var y in subjectObject[this.value]) { // console.log(y); second.options[second.options.length] = new Option(y) } }
Men sen får jag fan inte till loopen på 4e nivån! DET, är mitt problem. Jag är som sagt inte så skarp på JS, så jag skulle gärna uppskatta lite tips.
Hittills har jag gjort såhär:
Kod:
Målsättningen är som sagt att det här ska fylla upp Select ID="fourth" dropdownen i formuläret. Men det svar jag får ut från loopen (som ska läsa av 4e nivån i arrayen ovan) är "undefined", hela tiden. Skulle gärna uppskatta lite kritik och tips om vad jag gör för fel här? Eller kanske om hela upplägget är helt .. off? third.onchange = function () { fourth.length = 1 z = subjectObject[first.value][this.value] console.log(z); // document.write(z); for (let i = 0; i < z.length; i++) { fourth.options[fourth.options.length] = new Option(z[i]) } }
Jag är lite osäker på om det kanske är deklarationen av variabeln "z" som är felet? Att jag har BÅDE [first.value] och [this.value] i variabeln? Skulle kanske ha bara en av dom? eller ska jag definiera z-variabeln så att loopen enbart ska läsa av 4e nivån? alltså [third.value][this.value]? Jag tycker jag har provat det och .. ingenting funkar, blir "undefined" som svar jämt. Borde man formulera om hela loopen kanske?
Lite lost här, skulle uppskatta hjälp av mer lärda, vad jag gör för fel i sista loopen?
Tack så mycket på förhand
PS. antalet curly-parenteser kan vara lite off i inklistrade koden ovan, DET är inte problemet .DS
__________________
Senast redigerad av Marinerad65 2023-02-25 kl. 01:13.
Senast redigerad av Marinerad65 2023-02-25 kl. 01:13.