javascript - 一页上有多个谷歌可视化表

标签 javascript php jquery google-visualization

我在单个页面上创建多个 Google 可视化表时遇到问题。如何在单个页面上动态生成未知数量的具有完整功能的谷歌可视化表格?

我引用了这个(几乎相同的)问题来寻求帮助How to add two Google charts on the one page?但是,如果您在创建页面之前尚不知道表的数量,那么 Dominor Novus 的解决方案就无济于事。例如,有时我需要 5 个表,有时我只需要 1 个表。

我的问题是如何动态创建一个页面,该页面将动态创建多个谷歌可视化表,每个表都有自己的唯一标识符。那么,当用户单击表中的一行时,是否能够返回行号以及动态创建的表的唯一标识符?

最佳答案

为了有效地提出问题的解决方案,我们必须将表数据和表对象存储在数组中。我们首先为页面顶部的数据和表对象创建数组。

var tableData=new Array();
var table=new Array();
var tableid=0;

然后我们生成表,将它们存储在由唯一标识符引用的数组中。然后为了实现表的选择功能,我们向表对象添加一个监听器。然后,我们获取表的包含 div 的 id,并获取该 id 的子字符串来发现刚刚单击的表。然后我们像平常一样使用 .getSelection() 方法获取该表的行。一旦我们获得了行和表 ID,我们就可以根据用户单击的表和行将它们返回给用户。

//create dynamic number of tables
for (id=0;id<num_of_tables;id++) {
    var tableID = 'table_div' + id; //The id of the google visualization table

    //Generate the div for the google visualization table
    $('<div/>', {
        id: tableID,
        class: 'cd_table'
    }).appendTo('#tables');

    listData = data;

    if (listData[id].length>0) {
        tableData[id] = new google.visualization.DataTable();

        tableData[id].addColumn('string', 'name');
        tableData[id].addColumn('string', 'email');

        for (var i=0; i<listData[id].length; i++) {
            tableData[id].addRows(1);           
            tableData[id].setCell(i,0,listData[id][i].name);
            tableData[id].setCell(i,1,listData[id][i].email);
        }
    }

    table[id] = new google.visualization.Table(document.getElementById(tableID));
    table[id].draw(tableData[id], {showRowNumber: false, sortColumn: 0});

    google.visualization.events.addListener(table[id], 'select', function() {
        $(document).on('mousemove', '.google-visualization-table', function() { 
           tableid=$(this).closest('.cd_table').attr('id').substring(9);
        });

        var row;
        if (table[tableid].getSelection()[0] != undefined) {
            row = table[tableid].getSelection()[0].row;
            lastRowClick = row;
        } else row = lastRowClick;
        alert('table id:' + tableid + ' row:' + row);
    });
}

这几乎是完美的,但只有当您已经单击表格一次时才有效。我们还必须在初始页面加载 jquery 函数中添加 mousemove 事件,如下所示:

$(document).on('mousemove', '.google-visualization-table', function() { 
    tableid=$(this).closest('.cd_table').attr('id').substring(9);
});

完成了。您可以创建无限数量的动态生成的 Google 可视化表格,这些表格可以返回单击的行和单击的表格的 ID。

关于javascript - 一页上有多个谷歌可视化表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662223/

相关文章:

Javascript onmouseout sleep ?

javascript - 存储和检索搜索结果

javascript - 将选定的数据行传递到模式 Bootstrap 中

显示选择选项时的 JavaScript 事件?

javascript - 如何使用具有唯一类名的 jquery 定位链接?

javascript - 谷歌图表 : How to add a caption to the color axis

javascript - Codeception selenium WaitForJS 和 Ajax

php - NodeJS 推送队列,由 Laravel worker 使用

javascript - 如何从 php 向 Angular $http 服务抛出异常

IE 中的 Javascript 日期解析问题