通过 select 处理程序将 link 添加到 Google 图表

Add link to Google Chart via select handler

我试图通过 selection 处理程序在 Google 折线图中打开 link。出于某种原因,我的图表停止呈现,我不确定为什么(javascript 新手...)。

这是代码在我的html中加载的地方:

<pre><code><script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<!--<script type="text/javascript">
Hier den Javascript-Code aus dem unteren Panel einfügen um das Script direkt im Artikel auszuführen
</script>-->
<div id="tt_6_annotation" style="width: 100%; min-height: 300px; height:auto;"></div></pre></code>

这是我的代码:

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

function drawChart() {
  var dataTable = new google.visualization.DataTable();
  dataTable.addColumn('string', 'Monat');
  dataTable.addColumn('number', 'Bewerber');
  dataTable.addColumn('number', 'Stellenangebote');
  dataTable.addColumn({
    type: 'string',
    role: 'tooltip',
    p: {
      html: true // um CSS zu verwenden muss html:true gesetzt werden
    },
  });
  dataTable.addColumn({
  type: 'string',
  role: 'selection',
  }); //um direkt aus dem Datatable mit einem Klick auf einen Knotenpunkt über den select Handler einen Link zu öffnen

  dataTable.addRows([
    ['Jan', 1.370828308, 1.217768314, 'Stuff in my Tooltip', '168184',],
 ['Feb', 1.383085819, 1.28813154387171, 'Stuff in my Tooltip', '168185',],
        ]);


  var options = {
    title: 'Arbeitsmarkt Gesamt 2016 (Knotenpunkt anklicken um Links aufzurufen)',
    titleTextStyle: {fontSize: 20,},
    curveType: 'function',
    legend: 'bottom',
    colors: ['#2646ad', '#f56e12'],
    format: 'decimal',
    lineWidth: 3,
    tooltip: {
      isHtml: true,
      trigger: 'both', //both erlaubt es beim Klick auf den Knotenpunkt den Tooltip zu behalten, so dass man den Link anklicken kann
    },
    vAxis: {
      minValue: 0, // Damit das Diagramm bei 0 beginnt und nicht in einem näheren Bereich
      /*scaleType: 'log', // setzt einen Bereich, der sich um die vorhanden Punkte herum befindet*/
    },
    /*hAxis: {  
    slantedText: true, 
    slantedTextAngle: 30 // um die Beschriftung der x-Achse zu kippen (geht bis 180°) 
},
*/
  };

  var formatter1 = new google.visualization.NumberFormat({pattern:'#.##'});
formatter1.format(dataTable, 1);
  var formatter2 = new google.visualization.NumberFormat({pattern:'#.##'});
formatter2.format(dataTable, 2);



  var chart = new google.visualization.LineChart(document.getElementById('tt_6_annotation'));
  chart.draw(dataTable, options);


  //Bad boy isn't working as it should
  // a click handler which grabs some values then redirects the page
  var google.visualization.events.addListener(chart, 'select', function(){
  // grab a few details before redirecting
      var selection = chart.getSelection();
      var row = selection[0].row;
      var col = selection[0].column;
      var link = data.getValue(row, 4);
      location.href = 'http://www.mywebsite.de/' + row;
    });  


}

这是不起作用的部分。它应该获取数据表中的数字,这是 link 的一部分,并将其添加到我的 url,这是我的 select.-function:

的一部分
/ a click handler which grabs some values then redirects the page
  var google.visualization.events.addListener(chart, 'select', function(){
  // grab a few details before redirecting
      var selection = chart.getSelection();
      var row = selection[0].row;
      var col = selection[0].column;
      var link = data.getValue(row, 4);
      location.href = 'http://www.karriere.de/' + row;
    });  

有什么想法吗?

首先,需要验证选择是否存在

'select' 事件在选择和取消选择项目时触发

在访问数组元素之前验证选择是否存在

请参阅以下代码片段...

google.visualization.events.addListener(chart, 'select', function(){
  var selection = chart.getSelection();
  if (selection.length > 0) {
    var row = selection[0].row;
    var col = selection[0].column;
    var link = dataTable.getValue(row, 4);
    location.href = 'http://www.karriere.de/' + link;
  }
});

此外,'selection' 不存在 data role(最后一列)

dataTable.addColumn({
  type: 'string',
  role: 'selection',  // <-- should probably be 'label' instead
});