组合框中的Javascript数组
Javascript array in combo boxes
我已经给出了以下格式的数组,需要将其放入两个下拉框中,一个带有make,另一个带有基于第一个选择的模型。(实际的数组是巨大的,但我只包括了前几个)
var aMember = [{
"Make": "other",
"Models": ["other"]
}, {
"Make": "Boat",
"Models": ["Over 21 ft.", "Under 21 ft."]
}, {
"Make": "Motorcycle",
"Models": ["Over 600cc", "Under 600cc"]
}];
我需要有一个组合框与其他,船和摩托车,当选择填充第二个组合框与选项。
我以前几乎没有做过JavaScript,但我试过下面的代码,它不起作用。我真的不知道我是否已经接近我所需要的了。
<html>
<head>
<script>
var cars =[{"Make":"other","Models":["other"]},{"Make":"Boat","Models":["Over 21 ft.","Under 21 ft."]},{"Make":"Motorcycle","Models":["Over 600cc","Under 600cc"]}];
function populateDropdown(drop, items) {
drop.empty();
for(var i = 0; i < items.length; i++) {
drop.append('<option value=' + i + '>' + items[i].Make + '</option>');
}
drop.show();
}
populateDropdown( $('#Makes'), cars );
$('#Models').change(function() {
var modelIndex = $(this).val();
var model = Models[modelIndex ];
populateDropdown( $('#Models'), cars.Models);
});
</script>
</head>
<body onload = "populateDropdown( $('#Makes'), cars );">
<form>
MAKE:
<select name = 'Makes'>
</select>
MODEL:
<select name = 'Models'>
</select>
</select>
</form>
</body>
</html>
谢谢
- 您可以使用
$.grep
过滤出当前的品牌,然后获取该品牌的模型。 - 您可以使用
$.map
将包含所有数据的数组映射到make数组。 - 可以使用
$.each
- 你可以使用
$("<option>").val(...).text(...)
来构建option
更干净一点。 - 你需要
$(function() {...})
等待DOM准备好。 -
drop.show()
不需要,因为两个select
已经可见 - 您正在
Models
的变更事件上填充Models
。我想你的意思是在Makes
的变更事件上运行它。 - 您正在使用
name
而不是id
。此外,你不应该在HTML属性的=
周围使用空格。
更正后的版本:http://jsfiddle.net/zJTnw/1/.
$(function(){
var cars = [
{"Make":"other",
"Models": ["other"]},
{"Make":"Boat",
"Models": ["Over 21 ft.","Under 21 ft."]},
{"Make":"Motorcycle",
"Models": ["Over 600cc","Under 600cc"]}
];
function populateDropdown(drop, items) {
drop.empty();
$.each(items, function(i, v) { // `i` is index, `v` is element
drop.append($("<option>").val(v).text(v));
});
}
populateDropdown($('#Makes'), $.map(cars, function(x) {
return x.Make; // map `cars` to an array of makes
}));
$('#Makes').change(function() {
var make = $(this).val();
var item = $.grep(cars, function(x) { // get item of this make
return x.Make === make;
});
populateDropdown($('#Models'), item[0].Models); // populate with models
});
});
$(#Makes)
搜索ID!不是因为名字!将select name='Makes'
更改为id='makes'
试一试:
<html>
<head>
<script>
var cars =[{"Make":"other","Models":["other"]},{"Make":"Boat","Models":["Over 21 ft.","Under 21 ft."]},{"Make":"Motorcycle","Models":["Over 600cc","Under 600cc"]}];
function populateDropdown(drop, items) {
drop.empty();
for(var i = 0; i < items.length; i++) {
drop.append('<option value=' + i + '>' + items[i].Make + '</option>');
}
drop.show();
}
$(document).ready(function() {
populateDropdown( $('#makes'), cars );
$('#makes').change(function() {
var index = $(this).val();
var make = cars[index];
populateDropdown( $('#models'), make.Models);
});
});
</script>
</head>
<body>
<form>
MAKE:
<select id="make">
</select>
MODEL:
<select id="models">
</select>
</form>
</body>
</html>
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 将Javascript数组发送到控制器ASP.NET MVC
- JavaScript数组包含一个值
- 将JavaScript数组传递给函数
- javascript:数组循环
- 将数据存储在javascript数组中以供进一步使用
- 在Javascript数组中查找绝对最大值
- JavaScript数组优化以提高性能
- 在javascript数组中分散数字
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript数组动态
- javascript数组元素是否知道其封闭数组
- 将 JSON 数组解析为 JavaScript 数组
- 将Transform和Instance Variable转换为对象的JavaScript数组
- 使用Web Html表单创建Javascript数组
- 从重复的javascript数组结果集中只获取一行
- 如何为Javascript数组()的使用准备PHP变量
- Javascript数组和函数
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)