我一直在使用此处LINK找到的解决方案构建基于jQuery的级联下拉列表: 使用Javascript:
jQuery(function($) {
var locations = {
'Germany': ['Duesseldorf', 'Leinfelden-Echterdingen', 'Eschborn'],
'Spain': ['Barcelona'],
...
}
var $locations = $('#location');
$('#country').change(function () {
var country = $(this).val(), lcns = locations[country] || [];
var html = $.map(lcns, function(lcn) {
return '<option value="' + lcn + '">' + lcn + '</option>'
}).join('');
$locations.html(html)
});
});
这很好用,但是我需要传递城市的ID,而不是城市名称本身。我已经弄明白了如何为一个值添加一个键(当涉及到JS时,我比noob更少):
使用Javascript:
var locations = {
'Germany': ['Duesseldorf', 'Leinfelden-Echterdingen', 'Eschborn'],
'Spain': { 4 : 'Barcelona', 15 : 'Madrid', 21 : 'Marabella'],
...
}
问题是:如何将该ID传递到<option>
值...?
使用Javascript:
return '<option value="' + lcn + '">' + lcn + '</option>'
答案 0 :(得分:1)
map()
callbak函数有两个参数用于text&amp;值。更改您的map()
,如下所示。
var html = $.map(lcns, function (text, val) {
return '<option value="' + val + '">' + text + '</option>'
}).join('');
你的对象是错的。上次]
应为}
'Spain': { 4 : 'Barcelona', 15 : 'Madrid', 21 : 'Marabella'],
//---------------------------------------------------------^----
答案 1 :(得分:1)
在数组中使用标准化对象结构,而不是使用id作为对象的键。它更容易阅读,并且数组通常更容易用于重复结构
'Spain': [
{ id: 4, city: 'Barcelona' },
{ id: 15, city: 'Madrid' },
{ id: 21, city: 'Marabella' }
]
var html = $.map(lcns, function( item) {
return '<option value="' + item.id + '">' + item.city + '</option>'
}).join('');
答案 2 :(得分:0)
构建对象更自定义如下:
{ id: 1, city: 'Duesseldorf' };
如果你愿意,你可以这样做:
var locations = {
'Germany': [
{id: 1, city: 'Duesseldorf'}, {id: 2, city: 'Leinfelden'}]
};
var lcns = locations['Germany']; //Just an example
$.map(lcns, function(lcn) {
console.log(lcn.id);
console.log(lcn.city);
return '<option value="' + lcn.id + '">' + lcn.city + '</option>'
}).join('');
https://jsfiddle.net/npjdfn0y/2/
我可能还建议将您的对象更改为一系列国家/地区:
[
{ id: 1, country: 'Germany', cities: [
{ id: 1, city: 'Duesseldorf'}, { id: 2, city: 'Leinfelden' }
]},
{ id: 2, country: 'Spain', cities: [
{ id: 11, city: 'Barcelona' }, { id: 12, city: 'Madrid' }
]}
];