根据下拉列表中的选择,将headerText从JSON拉入结果div

时间:2013-10-23 14:18:14

标签: jquery json

我正在尝试根据用户选择的选项从JSON中提取headerText,并让它填充我的代码的结果div。我可以拉出十六进制颜色并更改框背景,但无法获取headerText。有什么想法吗?

HTML

<div id="result"></div>
<select id="dropdown">
    <option value="">Select</option>
</select>
<a href="#" id="fetch">Fetch JSON</a>

JSON

var json = {
    "dropdown": [
    {
        "optionText": "Budget Starter",
        "headerText": "Work 1-on-1 with your expert to build new spending habits (and break some old ones). Get on a real, sustainable budget that fits your lifestyle.",
        "color": "#59c5c7"
    },
    {
        "optionText": "5 Year Planner",
        "headerText": "Declare what you want - freedom from debt, security for your family, or an amazing trip. Your expert will build you a custom plan to help you get there.",
        "color": "#009cd0"
    },
    {
        "optionText": "Portfolio Builder",
        "headerText": "Start training for the world's hardest game: investing. Your expert will help you grow into a disciplined and balanced portfolio manager.",
        "color": "#39ad74"
    }
]
};

jQuery的:

$('#fetch').click(function() {
    $.post('/echo/json/', {json: JSON.stringify(json)}, function(data) {
        var dropdown = $('#dropdown');
        $.each(data.dropdown, function(i, v) {
            var option = $('<option value="' + v.color + '">' + v.optionText + '</option>');
            option.data('header', v.headerText).appendTo(dropdown);
        });
    });
});
//change color of header container based on dropdown selection
$("#dropdown").change(function() {
    $("#result").css("background-color", $(this).val()).text($(this).data('header'));
}).change();

CSS:

#result {
    height: 50px;
}
#dropdown, #fetch {
    position: relative; 
    left: 50%; 
    margin: 0 auto;
}

2 个答案:

答案 0 :(得分:1)

这应该有效。问题在于

$("#result").css("background-color", $(this).val()).text(
   $(this).data('header')  // <--
);

$(this)在这种情况下是选择,而不是选定的选项。

//change color of header container based on dropdown selection
$("#dropdown").change(function() {
    var headerText = $('option:selected', this).data('header');
    $("#result").css("background-color", $(this).val()).text(headerText);
}).change();

答案 1 :(得分:1)

只需用此逻辑替换下拉列表更改代码即可。

$("#dropdown").change(function () {
    $("#result").css("background-color", $(this).val());
    $("#result").html($(this).find("option:selected").data("header"));
}).change();