根据JSON结果设置“选择”框的选项

时间:2014-01-21 22:12:34

标签: javascript jquery json

我实际上有一些问题,但我会从主要问题开始。我想在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中使用。

2 个答案:

答案 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