2017-10-25 6 views
0

Haben Sie den Code hier:Wie kann ich ein Objekt basierend auf den Optionen erhalten, die ausgewählt wurden?

var i4options = { 
 
    TTXT1: [ 
 
    {val: "01", id: "(01) XT1 Option 1"}, 
 
    {val: "02", id: "(02) XT1 Option 2"} 
 
    ], 
 
    TTXT2: [ 
 
    {val: "01", id: "(01) XT2 Option 1"}, 
 
    {val: "02", id: "(02) XT2 Option 2"} 
 
    ] 
 
}; 
 

 
function i4check() { 
 
    const i1checkval = i1.options[i1.selectedIndex].value; 
 
    const i2checkval = i2.options[i2.selectedIndex].value; 
 
    const i3checkval = i3.options[i3.selectedIndex].value; 
 
    const i4checkoutput1 = "i4options" + i1checkval + i2checkval + i3checkval; 
 

 
    let userSettings = { 
 
    'product': i1checkval, 
 
    'type': i2checkval, 
 
    'source': i3checkval, 
 
    }; 
 

 
    if (userSettings.product !== '---' && userSettings.type !== '---' && userSettings.source !== '---') { 
 
    let newItem = document.createElement('option'); 
 

 
    var nofentries = i4options.(i1checkval + i2checkval + i3checkval).length; 
 
    var x = 0; 
 
    while (x < nofentries){ 
 
     i4.appendChild(new Option(i4options.(i1checkval + i2checkval + i3checkval)[x].id, i4options.(i1checkval + i2checkval + i3checkval)[x].val)); 
 
     x += 1; 
 
    } 
 
\t \t 
 
    } 
 
} 
 

 
function generatordropdown(){ 
 
    var o1 = i1.options[i1.selectedIndex].value; 
 
    var o2 = i2.options[i2.selectedIndex].value; 
 
    var o3 = i3.options[i3.selectedIndex].value; 
 
    var o4 = i4.options[i4.selectedIndex].value; 
 
\t 
 
    var output = o1 + o2 + o3 + o4; 
 
\t 
 
    document.getElementById("output").value = output; 
 
}
<form action="database/additem.php" method="post"> 
 

 
<h1>product</h1> 
 
<select id="i1" onchange="generatordropdown(); i4check();" name="product"> 
 
    <option selected="true" disabled="disabled">---</option> 
 
    <option value="T">(T) Telephone</option> 
 
</select><br> 
 

 
<h1>type</h1> 
 
<select id="i2" onchange="generatordropdown(); i4check();" name="type"> 
 
    <option selected="true" disabled="disabled">---</option> 
 
    <option value="T">(T) Model T</option> 
 
</select><br> 
 

 
<h1>source</h1> 
 
<select id="i3" onchange="generatordropdown(); i4check();" name="source"> 
 
    <option selected="true" disabled="disabled">---</option> 
 
    <option value="XT1">(XT1) XT1</option> 
 
    <option value="XT2">(XT2) XT2</option> 
 
</select><br> 
 

 
<h1>i4</h1> 
 
<select id="i4" onchange="generatordropdown()" name="category"> 
 
    <option selected="true" disabled="disabled">---</option> 
 
</select><br> 
 

 
<h1>ID</h1> 
 
<input onClick="this.setSelectionRange(0, this.value.length)" type="text" id="output" name="id" style="width: 50%;" readonly><br> 
 

 
</form>

Oder wenn Sie bevorzugen jsfiddle: https://jsfiddle.net/2kd6LdLc/

Zeile 27 und 30 heißt es:

(i1checkval + i2checkval + i3checkval) 

Was ich bin versuchen, hier zu tun, haben den Code überprüfen TTXT1 wenn Option i3 XT1 ist, und überprüfen Sie TTXT2 wenn Option i3 ist XT2. Ich könnte dies mit if-Anweisungen tun, aber ich möchte leicht neue Objekte hinzufügen, wenn ich muss, also möchte ich nicht jedes Mal eine if-Anweisung hinzufügen müssen. Irgendwelche Vorschläge, wie man das macht? Mir geht es gut mit Eval(), wenn es der einzige Weg ist, aber ich weiß nicht, wie ich es verwenden würde.

+0

mit Registerkarten nicht indent Code tun. Verwenden Sie Leerzeichen – smac89

+0

Ich denke, dass Sie nach etwas suchen mehr oder weniger gleichwertig zu ['lodash.get'] (https://lodash.com/docs/4.17.4#get) – smac89

+0

@ smac89 editted – finlx

Antwort

2

Sie müssen nur eckige Klammern Index von Eigenschaftsnamen, ein Objekt verwenden:

var entries = i4options[i1checkval + i2checkval + i3checkval]; 
var nofentries = entries.length; 
var x = 0; 
while (x < nofentries){ 
    i4.appendChild(new Option(entries[x].id, entries[x].val)); 
    x += 1; 
} 
+0

Danke dafür. Gibt es auch eine Möglichkeit, i4-Optionen klar zu machen, wenn i1,2 oder 3 geändert werden? Wenn ich jetzt i3 ändere, fügt es auch den anderen Satz von Optionen am Ende der Liste hinzu. – finlx

+1

@finlx Sie können 'while (i4.children [1]) { \t i4.removeChild (i4.children [1]); } 'um alle Optionen außer dem' --- 'zu löschen. – JLRishe

+0

Prost, nur für den Fall, dass Sie interessiert sind, fand ich das Hinzufügen von document.getElementById ('i4'). InnerText = null; gerade unter der if-Anweisung funktioniert auch – finlx

Verwandte Themen