【问题标题】:Google Charts: Problem handling a 'click' event谷歌图表:处理“点击”事件的问题
【发布时间】:2018-09-05 15:34:27
【问题描述】:

我有一个谷歌图表,一个条形图,我最近扩展了它,选择其中一个条将打开一个新页面,显示与该条对应的数据。我使用了基本交互指南,使用 selectHandler 来处理事件。

然后我决定在单击其中一个标签时做同样的事情,但我无法让它工作。我非常仔细地查看了文档和this older question(实际上,这是我的实际问题:如何从图表的标签中创建超链接?)寻求指导。我为点击事件添加了一个监听器,并为此添加了一个处理程序,但我的图表没有响应它们。

我的基本设置是:

google.charts.load('current', {
  callback: drawChart,
  packages: ['bar']
});

var books = [
  ['2018-07', 5, 98.0],
  ['2018-08', 5, 100.0], // etc.
];
function drawChart() {

  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Date');
  data.addColumn('number', 'Number Purchased');
  data.addColumn('number', 'Price Paid');

  data.addRows(books);

  var options = {
    chart: {
      title: 'Book Purchases',
    },
    width: 800,
    height: 800,
    bars: 'horizontal',
    series: {
      0: {
        axis: 'purchased'
      },
      1: {
        axis: 'price_paid'
      }
    },
    axes: {
      x: {
        purchased: {
          side: 'top',
          label: 'Number Purchased'
        },
        price_paid: {
          label: 'Price Paid'
        }
      }
    }
  };

function selectHandler() {
  var selectedItem = chart.getSelection()[0];
  if (selectedItem) {
    var date = data.getValue(selectedItem.row, 0);
    var query_string = '?date=' + date;
    var path = window.location.pathname;
    path = path.replace("bookgraph", "");
    path = path + "search" + query_string;
    var newURL = window.location.protocol + "//" + window.location.host + path;
    window.open(newURL, '_blank');
  }
}

function clickHandler(e) {
  alert('The user has clicked on ' + e.targetID);
}

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

google.visualization.events.addListener(chart, 'click', clickHandler);
google.visualization.events.addListener(chart, 'select', selectHandler);
chart.draw(data, options);

selectHandler 工作正常。但我什至无法让 clickHandler 显示警报(在此工作之后,我将实际编写其余部分);无论我点击哪里,它显然都没有被解雇。我做错了什么?

我为此设置了一个JS Fiddle page 来进行试验,使用 HTML 框架,这样它就可以实际工作了;这显示了有效的选择(当然是 404)和无效的点击。

谢谢。

【问题讨论】:

    标签: javascript charts google-visualization


    【解决方案1】:

    Material 图表不支持'click' 事件,
    issue #: 2257...

    还有几个不支持的配置选项,
    issue #: 2143...

    材料 = google.charts.Bar -- packages: ['bar']

    经典 = google.visualization.BarChart -- packages: ['corechart']


    一种解决方法是使用带有选项的 Classic 图表 --> theme: 'material'

    或注册您自己的点击事件,
    请参阅以下工作 sn-p...

    google.charts.load('current', {
      callback: drawChart,
      packages: ['bar']
    });
    
    var books = [
      ['2016-01', 3, 45.0],
      ['2016-02', 3, 56.0],
      ['2016-03', 1, 23.0],
      ['2016-04', 4, 60.0],
      ['2016-05', 1, 0],
      ['2016-06', 3, 14.0],
      ['2016-07', 4, 65.0],
      ['2016-08', 1, 15.0],
      ['2016-09', 13, 234.0],
      ['2016-10', 20, 834.0],
      ['2016-11', 5, 115.0],
      ['2016-12', 5, 58.0],
      ['2017-01', 6, 122.0],
      ['2017-02', 4, 84.0],
      ['2017-03', 1, 0],
      ['2017-04', 1, 30.0],
      ['2017-05', 2, 38.0],
      ['2017-06', 1, 11.0],
      ['2017-07', 0, 0],
      ['2017-08', 4, 88.0],
      ['2017-09', 5, 89.0],
      ['2017-10', 4, 73.0],
      ['2017-11', 5, 79.0],
      ['2017-12', 2, 37.0],
      ['2018-01', 1, 22.0],
      ['2018-02', 5, 98.0],
      ['2018-03', 5, 132.0],
      ['2018-04', 3, 56.0],
      ['2018-05', 14, 272.0],
      ['2018-06', 4, 88.0],
      ['2018-07', 5, 98.0],
      ['2018-08', 5, 100.0],
    ];
    
    function drawChart() {
      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Date');
      data.addColumn('number', 'Number Purchased');
      data.addColumn('number', 'Price Paid');
    
      data.addRows(books);
    
      var options = {
        chart: {
          title: 'Book Purchases',
        },
        width: 800,
        height: 800,
        bars: 'horizontal',
        series: {
          0: {
            axis: 'purchased'
          },
          1: {
            axis: 'price_paid'
          }
        },
        axes: {
          x: {
            purchased: {
              side: 'top',
              label: 'Number Purchased'
            },
            price_paid: {
              label: 'Price Paid'
            }
          }
        }
      };
    
      function selectHandler() {
        var selectedItem = chart.getSelection()[0];
        if (selectedItem) {
          var date = data.getValue(selectedItem.row, 0);
          var query_string = '?date=' + date;
          var path = window.location.pathname;
          path = path.replace("bookgraph", "");
          path = path + "search" + query_string;
          var newURL = window.location.protocol + "//" + window.location.host + path;
          window.open(newURL, '_blank');
        }
      }
    
      function clickHandler(e) {
        if (e.target.tagName === 'text') {
          console.log(e.target.textContent);
        }
      }
    
      var container = document.getElementById('bookgraph_material');
      var chart = new google.charts.Bar(container);
    
      google.visualization.events.addListener(chart, 'select', selectHandler);
    
      container.addEventListener('click', clickHandler);
    
      chart.draw(data, options);
    }
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="bookgraph_material"></div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      相关资源
      最近更新 更多