Javascript 如何在动态列表中设置初始值?
我有一个函数(通过ajax)从后端数据库获取现有记录的详细信息。检索记录后,jsp页面将填充详细信息,包括动态填充列表中项目的值 当我需要将该值设置到下拉列表中作为初始值时,我的问题就出现了。列表始终默认为第一项,即使在我显式设置了值之后也是如此 我尝试将整个列表(不使用任何过滤器)编码到页面中,这允许设置初始值,因此我可以安全地假设问题在于如何填充过滤列表。我似乎找不到有效的解决方案(而且向用户显示整个列表不是一个选项) 函数getRecord(){ $.ajax({ url:“”, 类型:“POST”, 数据:jQuery.param(searchObj), 成功:函数(数据、文本状态、jqXHR){ var_data=$.parseJSON(数据); var记录=_数据[“记录”]; $(“#记录ID”).val(记录[“ID”); 美元(“#国家”).val(记录[“国家]); /*填充特定于国家/地区的列表*/ 人口名单(记录[“国家]); /*在列表中设置所选项目*/ $(“#countryItems”).val(记录[“countryItem]”);//不起作用 $(“#countryItems”).prop(“selected”,record[“country]”);//也不起作用 $(“#countryItems选项[值='”+记录[“countryItem”]+“]”)。prop(“已选定”、“已选定”);//仍然不起作用 //在这里做其他事情 } } 功能大众列表(国家){ $.ajax({ url:“”, 类型:“POST”, 数据:{ 国家:国家 }, 成功:函数(数据、文本状态、jqXHR){ var_data=$.parseJSON(数据); var listMap=_data[“listMap”];//已筛选列表 //删除现有列表 $(“#countryItems选项”).remove(); //追加新列表 $.map(列表映射,函数(k,v){ $('#countryItems')。追加(新选项(k,v)); }); } }); }Javascript 如何在动态列表中设置初始值?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个函数(通过ajax)从后端数据库获取现有记录的详细信息。检索记录后,jsp页面将填充详细信息,包括动态填充列表中项目的值 当我需要将该值设置到下拉列表中作为初始值时,我的问题就出现了。列表始终默认为第一项,即使在我显式设置了值之后也是如此 我尝试将整个列表(不使用任何过滤器)编码到页面中,这允许设置初始值,因此我可以安全地假设问题在于如何填充过滤列表。我似乎找不到有效的解决方案(而且向用户显示整个列表不是一个选项) 函数getRecord(){ $.ajax({ url:“”, 类型:“
您可以尝试选择该选项,然后将所选属性设置为真值
$('option item selector').prop('selected',true);
只是为了给这一点添加一些结尾。感谢所有试图帮助的人。不幸的是,所有建议都不起作用(仍然不知道为什么)。我的同事最终提出了一个更复杂的解决方案,确实有效,所以我们不得不接受它
function getRecord() {
$.ajax({
url: "<s:url action='getRecords'/>",
type: "POST",
data: jQuery.param(searchObj),
success: function(data, textStatus, jqXHR) {
var _data = $.parseJSON(data);
var record = _data["record"];
$("#recordID").val(record["ID"]);
$("#country").val(record["country"]);
/* populate the country specific list */
// pass in the selected record as well
populateList(record["country"], record["countryItem"]);
// do other stuff here
}
}
function populateList(country, selectedItem) {
$.ajax({
url: "<s:url action='populateList'/>",
type: "POST",
data: {
country: country
},
success: function(data, textStatus, jqXHR) {
var _data = $.parseJSON(data);
var listMap = _data["listMap"]; // filtered list
// remove existing list
$('#countryItems option').remove();
// append new list
$.map(listMap, function(k, v) {
if(v == selectedItem) {
// add the selected indicator together with the option
option='<option value="'+ v +'" selected="selected">'+ k +'</option>'
}
else{
// just add the option
option='<option value="'+v+'">'+k+'</option>'
}
$('#countryItems').append(option);
});
}
});
}
函数getRecord(){
$.ajax({
url:“”,
类型:“POST”,
数据:jQuery.param(searchObj),
成功:函数(数据、文本状态、jqXHR){
var_data=$.parseJSON(数据);
var记录=_数据[“记录”];
$(“#记录ID”).val(记录[“ID”);
美元(“#国家”).val(记录[“国家]);
/*填充特定于国家/地区的列表*/
//同时传入所选记录
人口列表(记录[“国家”]、记录[“国家项目]);
//在这里做其他事情
}
}
函数populateList(国家/地区,selectedItem){
$.ajax({
url:“”,
类型:“POST”,
数据:{
国家:国家
},
成功:函数(数据、文本状态、jqXHR){
var_data=$.parseJSON(数据);
var listMap=_data[“listMap”];//已筛选列表
//删除现有列表
$(“#countryItems选项”).remove();
//追加新列表
$.map(列表映射,函数(k,v){
如果(v==selectedItem){
//将所选指示器与选项一起添加
选项=“”+k+“”
}
否则{
//只需添加选项
选项=“”+k+“”
}
$(“#countryItems”)。追加(可选);
});
}
});
}
我会认为这是正确的,因为这是唯一对我有效的解决方案,但我会投票支持@Patrick Vogt的答案,因为它应该对大多数其他人有效,他们没有我遇到的任何模糊问题。你确定记录[“countryItem”]匹配countryItems选项列表中的任何实际值吗?
$(“#countryItems选项[value=”+记录[“countryItem”]+“]”)。道具(“选定”、“选定”)
注意,选项
和[value..
@Slava.K是的,我在过滤列表和记录[“countryItem”]上都有一个控制台。日志
”。返回的值是正确的。@xkcd149好的,我试过了,仍然不起作用。也许我遗漏了什么?您必须将prop值设置为布尔值。请参见下面的答案。确切的语法是如何工作的?$(
?@sml485我没有测试它,但它可能会工作。如果不工作,您可以尝试以下选择器:$(“#countryItems选项[值=”+记录[“countryItem”]+“]”)。prop(“selected”,true);