【问题标题】:google visualization-Click eventgoogle可视化-点击事件
【发布时间】:2013-03-15 23:46:08
【问题描述】:

我正在使用谷歌可视化来绘制饼图。我面临的问题是,我无法在饼图上捕获点击事件。我正在这样做。

function drawchartfromRe()
{
    dashboard = new google.visualization.Dashboard(
            document.getElementById('dashboard_div'));
    //alert("RefuelLength"+totrefuelList.length);
    //alert("Vehicleid:"+totrefuelList[0].vehicleId);
   //google.load("visualization", "1", {packages:["corechart"]});
    data = new google.visualization.DataTable();
    data.addColumn('string', 'Task');
    data.addColumn('number', 'Quantity');
    data.addRows(totrefuelList.length);
    for (var i=0;i<totrefuelList.length;i++)
    {
       data.setValue(i, 0, totrefuelList[i].vehicleName);
       data.setValue(i, 1, totrefuelList[i].totalRefuelQty);
    }

    // var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
     chart = new google.visualization.ChartWrapper({
      'chartType': 'PieChart',
      'containerId': 'chart_div',
      'options': {
          title: 'Refuel Trend',
          height:'500',
          width:'400',
          backgroundColor: { fill:'transparent' },
        'legend': 'right'
      }
    });

  /* google.visualization.events.addListener(chart, 'select', function(e) {
       // var selection = chart.getSelection();
      var vehid= data.getValue(visualization.getSelection()[0].row, 0);
        getRefueldailywise(vehid);
    });*/
   // chart.draw(data, options);
   drawDashboard(dashboard,data,chart);
   google.visualization.events.addListener(chart, 'select', function() {
       // grab a few details before redirecting

      alert(data.getValue(chart.getSelection()[0].row, 0));
       //location.href = 'http://www.google.com?row=' + row + '&col=' + col + '&year=' + year;
     });
}

在萤火虫我得到这样的错误.. dashboard.getChart 不是函数

【问题讨论】:

    标签: javascript jquery google-visualization


    【解决方案1】:

    图表包装器不是图表对象,也没有click 事件。其实Pie Charts also do not have a click event,只有select

    如果你 read the documentation 它会说:

    1. 为包装器创建一个ready 事件
    2. ready 事件为包装器中的图表触发select 事件

    这是他们给出的例子:

    var wrapper;
    function drawVisualization() {
    
      // Draw a column chart
      wrapper = new google.visualization.ChartWrapper({
        chartType: 'ColumnChart',
        dataTable: [['Germany', 'USA', 'Brazil', 'Canada', 'France', 'RU'],
                    [700, 300, 400, 500, 600, 800]],
        options: {'title': 'Countries'},
        containerId: 'visualization'
      });
    
      // Never called.
      google.visualization.events.addListener(wrapper, 'onmouseover', uselessHandler);
    
      // Must wait for the ready event in order to
      // request the chart and subscribe to 'onmouseover'.
      google.visualization.events.addListener(wrapper, 'ready', onReady);
    
      wrapper.draw();
    
      // Never called
      function uselessHandler() {
        alert("I am never called!");
      }
    
      function onReady() {
        google.visualization.events.addListener(wrapper.getChart(), 'onmouseover', usefulHandler);
      }
    
      // Called
      function usefulHandler() {
        alert("Mouseover event!");
      }
    }
    

    因此,在您的情况下,您需要更改此部分:

       google.visualization.events.addListener(chart, 'ready', function() {
           // grab a few details before redirecting
    
          alert(data.getValue(chart.getSelection()[0].row, 0));
           //location.href = 'http://www.google.com?row=' + row + '&col=' + col + '&year=' + year;
         });
    

    这样的:

       google.visualization.events.addListener(chart, 'ready', function() {
           // grab a few details before redirecting
          google.visualization.events.addListener(chart.getChart(), 'select', function() {
              chartObject = chart.getChart();
              alert(data.getValue(chartObject.getSelection()[0].row, 0));
          });
    
           //location.href = 'http://www.google.com?row=' + row + '&col=' + col + '&year=' + year;
         });
    

    【讨论】:

    • 在你的例子中,还有一个名为“chart”的变量。即 google.visualization.events.addListener(chart, 'select', function()...这里你声明了图表变量..实际上在你的情况下只有一个变量..“包装器”..你能解释一下
    • 对不起,我在底部的示例中犯了一堆错误,所以我更新了它。关键是包装器不是图表,它是包装器。 wrapperObject.getchart() 将返回包装内的图表对象。您需要在chart.getChart() 上设置一个侦听器,而不是在图表本身上。 (您可能还想将对象的名称从“chart”更改为“wrapper”,以使您的变量名称也包含该区别)
    • 当我尝试你的 jmac 先生的例子时,我遇到了错误,data is not defined。我认为data 是谷歌可视化变量。
    • @Charles,介意用你的代码问一个单独的问题吗?如果未定义数据,可能有多种原因,但可能与事件处理程序根本无关。
    • 确实 jmac ..我设法追踪与事件不完全相关的问题..而是我的变量命名
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多