【问题标题】:Multiple google visualization table on one page [closed]一页上有多个谷歌可视化表[关闭]
【发布时间】:2016-04-12 06:15:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript php jquery google-visualization


    【解决方案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。

    【讨论】:

    • 我尝试了类似的方法,但得到的结果不一致,例如有时会显示多个图表,有时则不会(看似随机)。虽然也许我可以再看看并尝试 mousemove 侦听器技巧。我最终只是使用了一个不同的库。谢谢!
    • @avoliva 你最终使用了哪个库?
    • 我最终选择了 Chartist
    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多