Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于融合表的Google图表中的事件侦听器_Javascript_Events_Google Visualization_Google Fusion Tables - Fatal编程技术网

Javascript 基于融合表的Google图表中的事件侦听器

Javascript 基于融合表的Google图表中的事件侦听器,javascript,events,google-visualization,google-fusion-tables,Javascript,Events,Google Visualization,Google Fusion Tables,我正在尝试使用GoogleFusion表和GoogleCharts来构建一个表,该表将响应下拉菜单中的更改 我非常关注这个例子: 我可以使用融合表中的数据绘制表格。该表将响应选择菜单而不会出现问题 我想实现一个selectHandler,它将存储用户选择的行的内容。我将把行的内容传递给其他函数,但是我无法让selectHandler正常工作 google.load('visualization', '1', {packages: ['table']}); function drawT

我正在尝试使用GoogleFusion表和GoogleCharts来构建一个表,该表将响应下拉菜单中的更改

我非常关注这个例子:

我可以使用融合表中的数据绘制表格。该表将响应选择菜单而不会出现问题

我想实现一个selectHandler,它将存储用户选择的行的内容。我将把行的内容传递给其他函数,但是我无法让selectHandler正常工作

  google.load('visualization', '1', {packages: ['table']});

  function drawTable() {

      var query = "SELECT 'key', 'description' as Style, " +
              "'business_name' as Name, 'Rating' " +
              'FROM 15bCp26r1CDuN86Tu8hMOGRWlZwNI30Pl60srz9g';
      var vendors = document.getElementById('vendors').value;
      if (vendors) {
        query += " WHERE 'description' = '" + vendors + "'";
      }

      var queryText = encodeURIComponent(query);

      var gvizQuery = new google.visualization.Query(
        'http://www.google.com/fusiontables/gvizdata?tq=' + queryText);

      gvizQuery.send(function(response) {
        var table = new google.visualization.Table(
          document.getElementById('visualization'));

        var data = response.getDataTable();

        table.draw(data, {
            showRowNumber: false,
            sortColumn: 3,
            sortAscending: false
        });

        google.visualization.events.addListener(table, 'select', selectHandler);

        function selectHandler() {
            //alert("Selected");
            var selectedItem = table.getSelection()[0];
            var value = data.getValue(selectedItem.row, selectedItem.column);
            alert(value);
        }

    });      

  }
我非常密切地遵循这个例子。selectHandler确实有效。我可以在用户单击某行时弹出一个警报框,但我无法将该行的内容存储到变量值中


我做错了什么?

当您在
selectHandler
函数中声明
var value
时,
value
的范围是函数的局部范围。函数返回后,局部变量被标记为垃圾收集,并使其不可访问。如果要长期存储
,则需要在
selectHandler
的本地范围之外声明,如下所示:

var value;
function selectHandler () {...}
function selectHandler() {
    var selection = table.getSelection();
    if (selection.length > 0) {
        // do something
    }
}
顺便说一句,在
selectHandler
函数中,您应该测试选择的长度,因为它可以是零(这会在代码中引发错误)或大于1(在这种情况下,您没有捕获所有相关信息)。试着这样做:

var value;
function selectHandler () {...}
function selectHandler() {
    var selection = table.getSelection();
    if (selection.length > 0) {
        // do something
    }
}
或者这个:

function selectHandler() {
    var selection = table.getSelection();
    for (var i = 0; i < selection.length; i++) {
        // do something
    }
}
函数selectHandler(){
var selection=table.getSelection();
对于(变量i=0;i