我实际上有一些问题,但我会从主要问题开始。我想在JSON的基础上设置选择框的值。
这是有问题的HTML,
<label class="lbl">Office: </label>
<select tab-index="6" class="required" name="office" class="off">
<option value="">---------</option>
<option value="U">London</option>
<option selected="selected" value="R">Delhi</option>
<option value="W">Lisbon</option>
</select>
JSON发送它像这样,我无法显示完整的JSON,因为它太大了,但我会显示一个部分,Location: "U"
。
这是JS部分:
if (data.Office === "R") {
$('select option[value="Delhi"]').prop('selected', true);
}
if (data.Office === "U") {
console.log('here');
$('.off option[value="London"]').attr('selected', 'selected');
}
if (data.Office === "W") {
$('select option[value="Lisbon"]').prop('selected', true);
}
但它不起作用?任何人都可以指出原因吗?
此外,我有一个经理列表说,我也在JSON中得到它。所以我这样做,
for (var i = 0; i < data.Managers.length; i++) {
find_input = $('input[name="project_manager[]"').length;
if (find_input != data.Managers.length) {
$('<input type="text" name="project_manager[]" class="" value="" />').appendTo('#managers');
}
console.log(data.Managers[i].Manager);
$('input[name="project_manager[]"').each(function() {
$(this).val(data.Managers[i].Manager);
});
}
没有文本框取决于管理器的数量,但它仅在附加的文本框中设置管理器数组中最后一项的值。为什么?
此外,我无法在Firefox中设置textarea
的值,如下所示:
$('textarea#some_id').val(data.Description);
虽然可以在Chrome中使用。
答案 0 :(得分:1)
首先你需要添加字符“&lt;”在选择框的第3个选项的开头:
<option selected="selected" value="R">Delhi</option>
现在,在JS代码中,您的问题是您使用的是错误的值。而不是:
$('select option[value="Lisbon"]').prop('selected', true);
您必须使用:
$('select option[value="W"]').prop('selected', true);
我希望它有所帮助。
答案 1 :(得分:0)
我认为您的选择器应该是以下形式:
$('select option[value="R"]').prop('selected', true);
请注意,该值与HTML中的值相同,而不是显示的字符串(即“R”而不是“Delhi”)。
此外,您应该对所选标志始终使用prop()
,如John Resig所述here。