如何根据选择的选项 has/have 获取对象?
How can I get an object based on what option(s) has/have been selected?
在此处获取代码:
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;
}
}
}
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;
var output = o1 + o2 + o3 + o4;
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>
或者如果你更喜欢 jsfiddle:https://jsfiddle.net/2kd6LdLc/
第 27 行和第 30 行说:
(i1checkval + i2checkval + i3checkval)
我在这里要做的是让代码在选项 i3 为 XT1 时检查 TTXT1,在选项 i3 为 XT2 时检查 TTXT2。我可以用 if 语句来做到这一点,但我想在必要时轻松添加新对象,所以我不想每次都添加 if 语句。关于如何执行此操作的任何建议?如果它是唯一的方法,我可以使用 eval() 但我不知道我将如何使用它。
您只需要使用方括号通过 属性 名称索引对象:
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;
}
在此处获取代码:
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;
}
}
}
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;
var output = o1 + o2 + o3 + o4;
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>
或者如果你更喜欢 jsfiddle:https://jsfiddle.net/2kd6LdLc/
第 27 行和第 30 行说:
(i1checkval + i2checkval + i3checkval)
我在这里要做的是让代码在选项 i3 为 XT1 时检查 TTXT1,在选项 i3 为 XT2 时检查 TTXT2。我可以用 if 语句来做到这一点,但我想在必要时轻松添加新对象,所以我不想每次都添加 if 语句。关于如何执行此操作的任何建议?如果它是唯一的方法,我可以使用 eval() 但我不知道我将如何使用它。
您只需要使用方括号通过 属性 名称索引对象:
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;
}