我正在尝试使用jQuery .change()
创建两个<select>
元素,其中第一个<select id="state">
用于生成状态列表,第二个<select id="city">
用于生成一系列城市。
州和城市的值不会被硬编码,而是根据从Web服务传递的值生成。
要生成的选项列表应该像这样工作:如果用户从<select id="state">
选择状态,则所选值将传递给Web服务以检索列表以生成<select id="city">
for城市。
我真的不确定如何实现这一点。有人可以告诉我吗?
答案 0 :(得分:4)
它应该看起来像
$(function(){
// populate the states list from Ajax
$.ajax( {
url:"/listStates",
type:"GET",
success:function( data ) {
var statesList = data;
if ( typeof(data) == "string" ){
statesList = JSON.parse(data);
}
$.each( statesList, function( index, state ){
$("#state").append($("<option></option>",{value:state.value, text:state.label});
});
},
error:function( result ) {
console.log(["error getting states",result]);
}
});
// register on state list change
$("#state").change( function(){
// on change dispatch an AJAX request for cities and populate cities
$.ajax({ url : "/listCities",
data : {"state": $("#state").val() },
type:'GET',
success:function( data ) {
var citiesList = data; // assuming list object
if ( typeof(data) == "string"){ // but if string
citiesList = JSON.parse( data );
}
$("#city").empty();
$.each(citiesList, function(index,city){
$("#city").append($("<option></option>", {"value":city.value, "text":city.label}));
}
},
error:function( result ){ console.log(["error", result]); }
})
});
这可以让你开始,但我没有遵循lint最佳做法。
我在编写代码时假设了以下内容
该路线的响应是一个JSON,其中包含每个城市的值和标签列表。像这样:
[{ value : "AM" , label : "Amsterdam" }, .... ]
本例中您可能需要阅读的唯一内容是:
如果您有任何疑问,请评论我的回复,我将很乐意解释/添加/修改
答案 1 :(得分:3)
您必须按照以下步骤实现此目标:
.change()
事件
您可以尝试这样测试:
$(function(){
$.ajax({
url:your url,
type: 'post',
dataType: 'json', // or your choice of returned data
success: function(data){
$.each(data, function(i, v){
$('<option value="'+v.name+'">'+v.text+'</option>').appendTo('#country');
});
}
});
$('#country').change(function(){
$.ajax({
url:your url,
type: 'post',
dataType: 'json', // or your choice of returned data
success: function(states){
$.each(states, function(i, stt){
$('<option value="'+stt.name+'">'+stt.text+'</option>').appendTo('#states');
});
}
});
$('#states').empty();
});
});
答案 2 :(得分:0)
非常简单 - 所有你需要做的就是有两个下拉菜单,一个有完整的状态列表,第二个(空)城市列表只包含一个空白禁用选项。
只要状态下拉列表触发change
事件,您就会提取状态数据并通过AJAX调用将其发送到您的服务器或某个Web服务,该服务将返回该州的城市列表。
然后,您将使用返回的城市值填充第二个下拉列表。