通过遍历JSON文件来填充数据列表选项
Populate datalist options by iterating through JSON file
我正在尝试创建一个搜索框,该搜索框将根据json文件中键值对的用户输入自动完成。看起来使用datalist可能是最好的选择,但当我执行下面的代码时,html中不会出现选项标记。
我对jquery和json还很陌生,所以我对建议持开放态度。
这是json。该列表包含1450项(如果相关):
{ "osCars": [
{ "id": 1,
"name": "Cadillac",
"type": "Sedan",
"desc": "A fine American automobile"
},
{ "id": 2,
"name": "BWM",
"type": "Sedan",
"desc": "A fine German automobile"
},
{ "id": 3,
"name": "Lexus",
"type": "Sedan",
"desc": "A fine Japanese automobile"
}
]}
这是html:
<input type="text" maxlength="30" list="carList" id="carSearchBox" name="carSearchBox" pattern="[A-Za-z '-]*$" placeholder="search cars" autofocus autocomplete="on">
<datalist id="carList"></datalist>
<script src="js/main.js"></script>
<script>window.onload=getCars;</script>
下面是javascript/jquery:
function getCars() {
var url, carOption;
url = 'js/cars.json';
$.getJSON(url, function(data) {
//populate the cars datalist
$(data.osCars).each(function() {
carsOption = "<option value='"" + this.id + "'">" + this.name + "</option>";
$('#carList').append(carsOption);
});
});
}
事实证明,问题不是我怀疑的javascript,而是我的JSON文件。我使用了另一个JSON文件的URL(我知道它是有效的),一切都很好。我想使用的文件太长,无法使用jsonLint进行验证,并且有一些冗长的文本值。可能有一个错误的双引号在那里,我没有看到,这是扔了它。
我认为问题在于你使用this.id作为值,而不是this.name。HTML5中的数据列表和自动完成功能似乎还没有在浏览器之间一致地实现。例如:当在数据列表中,选项的内部html(显示值)与值不同时,Chrome似乎有问题。
将代码更改为id和值都使用"this.name"效果良好(至少在Chrome中):
function getCars() {
$(data.osCars).each(function (idx, o) {
carsOption = "<option value='" + this.name + "'>" + this.name + "</option>";
$('#carList').append(carsOption);
});
}
请参阅以下小提琴手示例:http://jsfiddle.net/6HGuU/
以及这个相关的问题:HTML5数据列表值与内部文本
如果您需要检索所选的ID而不是名称,那么您可以将其作为一个单独的步骤来查找(相关问题包含一个答案,并提出了具体的方法)。
相关文章:
- 如何在Highchart中动态填充数据
- 使用jquery在选择框中的选项中填充数据
- 使用jquery、javascript重新填充数据
- 如何从 API 填充数据并加载到下拉列表中
- 通过遍历JSON文件来填充数据列表选项
- 在引导模式中,点击相应的datatables行中的按钮,填充数据
- 当选择District时,PHP将从数据库中填充数据
- 从角度工厂返回数据,返回对象后填充数据
- 高图表 - 从数组填充数据
- 在承诺函数从 pouchdb 填充数据之前触发 Ionic/Angular $watch的问题
- 无法用同位素填充数据
- 使用 php 发送 json 填充数据表
- JQuery - 在表单中填充数据的正确方法
- 翡翠选择字段填充数据
- C# MVC 填充数据表中的下拉列表组
- 自动填充数据被javascript的onchange事件覆盖
- 如何在html中只使用ng repeat来填充数据,而不使用repeat html's元素
- 用Firebase和Angular填充数据表
- 通过JS Ajax调用问题填充数据
- 使用两个ajax调用在两个html表中填充数据