[英]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>
謝謝
$(#Makes)
搜索ID! 不是這個名字! 將選擇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>
$.grep
過濾出當前的品牌,然后獲取該品牌的模型。 $.map
將具有所有數據的數組映射到$.map
數組。 $.each
都可以使用。 $("<option>").val(...).text(...)
將option
構建得更整潔。 $(function() {...})
等待DOM准備就緒。 select
都已經可見,所以不需要drop.show()
Models
上的Models
的變化事件。 我認為您的意思是在Makes
的change事件上運行它。 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
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.