单击<select>下拉菜单中的选项时如何绘制Google图表?

时间:2017-10-13 01:16:21

标签: javascript charts google-visualization

假设我有&lt; select&gt;下拉菜单在这里: &lt; select id =&#34; menu&#34;&gt;     &LT;选项&GT;&的LiveJournal LT; /选项&GT;     &LT;选项&GT; librarybooks&LT; /选项&GT;     &LT;选项&GT;黑子&LT; /选项&GT; &LT; /选择&GT; 我尝试将其链接到Google Chart API,因此当我单击菜单中的选项时,它将在页面上绘制相应的图表(以替换现有的图表)。 我使用object.onchange来实现这一点,但似乎chart.draw赢得了无法绘制图表,我还缺少什么呢? //下拉菜单选择 document.getElementById(&#34; menu&#34;)。onchange = function(){     //的LiveJournal     if(this.selectedIndex == 0){         警报(&#34;默认&#34);     }     // librarybooks     if(this.selectedIndex == 1){         警报(&#34; librarybooks&#34);         var data = google.visualization.arrayToDataTable([             [&#39; Digit&#39;,&#39; Benford&#39;,&#39; Librarybooks&#39;],             [&#39; 1&#39;,1000,200],             [&#39; 2&#39;,1170,760],             [&#39; 3&#39;,660,100],             [&#39; 4&#39;,1030,300],             [&#39; 5&#39;,1030,140],             [&#39; 6&#39;,1030,640],             [&#39; 7&#39;,1030,240],             [&#39; 8&#39;,1030,440],             [&#39; 9&#39;,1030,840]         ]);;         chart.draw(data,google.charts.Bar.convertOptions(options));     }     //太阳黑子     if(this.selectedIndex == 2){         警报(&#34;黑子&#34);     } } 这是我使用的原始API: &#13; &#13;       google.charts.load(&#39; current&#39;,{&#39; packages&#39;:[&#39; bar&#39;]});&#13;       google.charts.setOnLoadCallback(drawChart);&#13; &#13;       function drawChart(){&#13;         var data = google.visualization.arrayToDataTable([&#13;           [&#39;年度&#39;,&#39;销售&#39;,&#39;费用&#39;,&#39;利润&#39;],&#13;           [&#39; 2014&#39;,1000,400,200],&#13;           [&#39; 2015&#39;,1170,460,250],&#13;           [&#39; 2016&#39;,660,1120,300],&#13;           [&#39; 2017&#39;,1030,540,350]&#13;         ]);&#13; &#13;         var options = {&#13;           图表:{&#13;             标题:&#39;公司业绩&#39;,&#13;             副标题:&#39;销售,费用和利润:2014-2017&#39;,&#13;           }&#13;         };&#13; &#13;         var chart = new google.charts.Bar(document.getElementById(&#39; columnchart_material&#39;));&#13; &#13;         chart.draw(data,google.charts.Bar.convertOptions(options));&#13;       }&#13; &LT; HTML&GT;&#13;   &LT; HEAD&GT;&#13;     &lt; script type =&#34; text / javascript&#34; SRC =&#34; HTTPS://www.gstatic.com/charts/loader.js"&GT;&LT; /脚本&GT;&#13;     &lt; script type =&#34; text / javascript&#34;&gt;&lt; / script&gt;&#13;   &LT; /头&GT;&#13;   &LT;身体GT;&#13;     &lt; div id =&#34; columnchart_material&#34; style =&#34; width:800px;身高:500px;&#34;&gt;&lt; / div&gt;&#13;   &LT; /体&GT;&#13; &LT; / HTML&GT;&#13; &#13; &#13; 链接到Google Charts API

2 个答案:

答案 0 :(得分:1)

请勿查看创建chart的位置 - &gt; var chart = new google.charts.Bar...

options的定义 - &gt; var options = {...

建议使用switch语句来确定菜单的值

请参阅以下工作代码段...

&#13;
&#13;
google.charts.load('current', {
    packages: ['bar']
}).then(function () {
    var dataDefault = google.visualization.arrayToDataTable([
        ['Year', 'Sales', 'Expenses', 'Profit'],
        ['2014', 1000, 400, 200],
        ['2015', 1170, 460, 250],
        ['2016', 660, 1120, 300],
        ['2017', 1030, 540, 350]
    ]);

    var dataLibraryBooks = google.visualization.arrayToDataTable([
        ['Digit', 'Benford', 'Librarybooks'],
        ['1', 1000, 200],
        ['2', 1170, 760],
        ['3', 660, 100],
        ['4', 1030, 300],
        ['5', 1030, 140],
        ['6', 1030, 640],
        ['7', 1030, 240],
        ['8', 1030, 440],
        ['9', 1030, 840]
    ]);;

    var dataSunspots = google.visualization.arrayToDataTable([
        ['x', 'y'],
        ['A', 10],
        ['B', 30],
        ['C', 50],
        ['D', 70],
        ['E', 90]
    ]);

    var options = {
        chart: {
            title: 'Bar Chart'
        }
    };

    var chart = new google.charts.Bar(document.getElementById('chart_div'));

    var menu = document.getElementById('menu');
    menu.addEventListener('change', drawChart, false);

    drawChart();
    function drawChart() {
      switch (menu.selectedIndex) {
        case 1:
          console.log('librarybooks');
          chart.draw(dataLibraryBooks, google.charts.Bar.convertOptions(options));
          break;

        case 2:
          console.log('Sunspots');
          chart.draw(dataSunspots, google.charts.Bar.convertOptions(options));
          break;

        default:
          console.log('default');
          chart.draw(dataDefault, google.charts.Bar.convertOptions(options));
      }
    }
});
&#13;
<script src="https://www.gstatic.com/charts/loader.js"></script>
<select id="menu">
  <option selected>livejournal</option>
  <option>librarybooks</option>
  <option>sunspots</option>
</select>

<div id="chart_div"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您尚未致电:google.charts.setOnLoadCallback(drawChart);

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['bar']});
 
      function drawgraph(index){  
 if(index==0){
   document.getElementById('livejournal');
 google.charts.setOnLoadCallback(drawChart('livejournal'));
 }
 if(index==1){
   google.charts.setOnLoadCallback(drawChart('librarybooks'));
 }
if(index==2){
   google.charts.setOnLoadCallback(drawChart('sunspots'));
 }
      }
      function drawChart(divId) {
        var data = google.visualization.arrayToDataTable([
          ['Year', 'Sales', 'Expenses', 'Profit'],
          ['2014', 1000, 400, 200],
          ['2015', 1170, 460, 250],
          ['2016', 660, 1120, 300],
          ['2017', 1030, 540, 350]
        ]);

        var options = {
          chart: {
            title: 'Company Performance',
            subtitle: 'Sales, Expenses, and Profit: 2014-2017',
          },
          bars: 'horizontal' // Required for Material Bar Charts.
        };

        var chart = new google.charts.Bar(document.getElementById(divId));

        chart.draw(data, google.charts.Bar.convertOptions(options));
      }
    </script>
  </head>
  <body>
    <select id="menu" onchange=drawgraph(this.selectedIndex)>
    <option>livejournal</option>
    <option>librarybooks</option>
    <option>sunspots</option>
</select>
    
    <div id="livejournal" style="width: 900px; height: 500px;"></div>
    <div id="librarybooks" style="width: 900px; height: 500px;"></div>
    <div id="sunspots" style="width: 900px; height: 500px;"></div>
  </body>
</html>