【发布时间】:2018-12-13 13:09:06
【问题描述】:
当从datalist 中选择stateName(即佛蒙特州)时,我想在结果中显示datalist option id= 中的州缩写名称abbrName(即VT)。
我当前的代码使用从object 派生的索引值搜索datalist options,但问题是datalist 和object 的排序方式不同,因此索引值@ 987654331@ 产生错误的结果。
我应该用IndexOf 搜索datalist 吗?如何找到datalist 索引位置?
var n = document.getElementById("myInputId");
n.addEventListener("keyup", function(event) {
event.preventDefault();
if (event.keyCode === 13) {
document.getElementById("myButton").click();
}
});
function result() {
var a = n.value;
document.getElementById("stateName").innerHTML = a;
myObj.info.forEach(function(e, z) {
var q = document.getElementById("stateName").innerHTML;
if (e.properties.id == q) {
document.getElementById("statePosition").innerHTML = z;
document.getElementById("statePopulation").innerHTML = myObj.info[z].properties.population;
document.getElementById("abbrName").innerHTML = document.getElementById('myInput').getElementsByTagName('option')[z].getAttribute('id');
}
});
}
myObj = {
"type": "A",
"info": [{
"item": "1",
"properties": {
"id": "Vermont",
"population": "620,000"
}
},
{
"item": "2",
"properties": {
"id": "Alabama",
"population": "4,780,000"
}
},
{
"item": "3",
"properties": {
"id": "California",
"population": "39,540,000"
}
}
]
}
<input list="myInput" id="myInputId" value="" option="">
<button id="myButton" onClick="result()">submit</button>
<datalist id="myInput">
<option id="AL">Alabama</option>
<option id="CA">California</option>
<option id="VT">Vermont</option>
</datalist>
<p>Object index position: <span id="statePosition"></span></p>
<p>Object result (state name): <span id="stateName"></span></p>
<p>Object result (population): <span id="statePopulation"></span></p>
<p>Datalist index position (state abbreviation position): <span id="abbrPosition"></span></p>
<p>Datalist "option id" (state abbreviation name): <span id="abbrName"></span></p>
【问题讨论】:
-
为什么不使用一个对象,其键是datalist中选项值的ID,而不是数组?
-
有趣的想法,但实际上我是直接从外部 JSON 检索数据。
-
所以?您可以轻松编写将数组转换为对象的代码。
-
感谢您的提示,我会调查的。您还有其他解决方案吗?
标签: javascript html javascript-objects indexof html-datalist