根据所选选项生成图表

时间:2013-01-29 08:25:02

标签: javascript jquery html

我有一个带有选择框的html页面。我在Jquery文件中对其进行编码,以便当选择的选择是“足球”时,它将比较Jquery中的json数据并生成图表。但是,如果我选择“电影”,它将显示错误。

但是当选择改变时我无法做出反应。

这是我的HTML代码:

<title>Pie chart</title>
    <style type="text/css">
        .style1
        {
            text-align: center;
        }
    </style>
</head>
<body>

<p class="style1">
        Select your category :
        <select id="selection" name="D1" onclick="return selection_onclick()">
            <option value ="football" selected =selected>Football Team</option>
            <option value ="Movie">Movie</option>
        </select></p>
<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto">
    <br />
    </div>
</body>

这是我的Jquery文件,其中嵌入了json:

$(function () {
    var json = {
        "data": [
                     {
                         "cid": "football",
                         "id": "/en/chelsea_fc",
                         "topic": "Chelsea F.C.",
                         "audience": [
                             {
                                 "userid": "100003914111287",
                                 "information": [
                                     {
                                         "category": "Athlete",
                                         "source": "Didier Drogba"
                                     },
                                     {
                                         "category": "Athlete",
                                         "source": "Frank Lampard"
                                     },
                                     {
                                         "category": "Professional sports team",
                                         "source": "Chelsea Football Club"
                                     },
                                     {
                                         "category": "favorite_teams",
                                         "source": "Chelsea Football Club"
                                     }
                                 ]
                             },
                             {
                                 "userid": "100003914111287",
                                 "information": [
                                     {
                                         "category": "Athlete",
                                         "source": "Didier Drogba"
                                     },
                                     {
                                         "category": "Athlete",
                                         "source": "Frank Lampard"
                                     },
                                     {
                                         "category": "Professional sports team",
                                         "source": "Chelsea Football Club"
                                     },
                                     {
                                         "category": "favorite_teams",
                                         "source": "Chelsea Football Club"
                                     }
                                 ]
                             }
                         ],
                         "type": "/soccer/football_team"
                     },
                     {
                         "id": "/en/manchester_united_fc",
                         "topic": "Manchester United F.C.",
                         "audience": [
                             {
                                 "information": [
                                     {
                                         "category": "Athlete",
                                         "source": "Ryan Giggs"
                                     },
                                     {
                                         "category": "Professional sports team",
                                         "source": "Manchester United"
                                     },
                                     {
                                         "category": "favorite_teams",
                                         "source": "Manchester United"
                                     }
                                 ],
                                 "userid": "100003921730958"
                             }
                         ],
                         "type": "/soccer/football_team"
                     }
                 ]
    };

接下来是我生成图表的方式:

     $("#selection").on('change', function(){
   // var e = document.getElementById("selection");
        var id =$(this).val();
        if(id = json.data[0].cid) {
        console.log(id)
        $.each(json.data, function (i, v) {
        pts.push([v.topic, v.audience.length]);
        });
        }

        else
        alert("Wrong data");





    //Radialize the colors
    Highcharts.getOptions().colors = $.map(Highcharts.getOptions().colors, function (color) {
        return {
            radialGradient: { cx: 0.5, cy: 0.3, r: 0.7 },
            stops: [
            [0, color],
            [1, Highcharts.Color(color).brighten(-0.3).get('rgb')] // darken
    ]
        };
    });

    var chart;
    $(document).ready(function () {

        /*var e = document.getElementById("selection");
        var id = e.options[e.selectedIndex].value;
        console.log(id);

        if (id = json.data[0].cid) {

        $.each(json.data, function (i, v) {
        pts.push([v.topic, v.audience.length]);*/
            chart = new Highcharts.Chart({
                chart: {
                    renderTo: 'container',
                    plotBackgroundColor: null,
                    plotBorderWidth: null,
                    plotShadow: false
                },
                title: {
                    text: 'Facebook like'
                },
                tooltip: {
                    pointFormat: '{series.name}: <b>{point.percentage}%</b>',
                    percentageDecimals: 0
                }


            ,
                plotOptions: {
                    pie: {
                        allowPointSelect: true,
                        cursor: 'pointer',
                        point: {
                            events: {
                                click: function (event) {
                                    //var personame =" ";
                                    var id = "10150616324193820";
                                    for (var i = 0; i < jsonFB.user1.length; i++) {
                                        for (var k = 0; k < json.data.length; k++) {
                                            for (var j = 0; j < json.data[k].audience.length; j++) {


                                                if (jsonFB.user1[i].id = json.data[k].audience[j].userid) {
                                                    var personname = jsonFB.user1[i].name;

                                                    var id = jsonFB.user1[i].id;



                                                }

                                                else {

                                                    alert("Error!");

                                                }

                                            }


                                        }

                                        alert("Person who like " + this.name + " are " + personname);
                                        var ans = confirm("Do you want to view this person profile?");
                                        if (ans)
                                            window.location = "http://www.facebook.com/people/@/" + id;


                                    }
                                }
                            }
                        },
                        showInLegend: true,
                        dataLabels: {
                            enabled: true,
                            color: '#000000',
                            connectorColor: '#000000',

                            formatter: function () {
                                return '<b>' + this.point.name + '</b>: ' + Math.round(this.percentage) + '%';
                            }

                        }
                    }
                },

                series: [{
                    type: 'pie',
                    name: 'Likes',
                    data: pts

                }]
            });


    });


});

1 个答案:

答案 0 :(得分:0)

onclick 不是您感兴趣的事件。您必须改为使用 onchange

<select id="selection" name="D1" onchange="selection_onclick()">
    <option value ="football" selected =selected>Football Team</option>
    <option value ="Movie">Movie</option>
</select></p>

希望它有所帮助,