Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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 谷歌图表冻结后点击标签,如何使用';选择';侦听器在';就绪';听者是否正确?_Javascript_Google Maps_Charts_Google Visualization_Onclicklistener - Fatal编程技术网

Javascript 谷歌图表冻结后点击标签,如何使用';选择';侦听器在';就绪';听者是否正确?

Javascript 谷歌图表冻结后点击标签,如何使用';选择';侦听器在';就绪';听者是否正确?,javascript,google-maps,charts,google-visualization,onclicklistener,Javascript,Google Maps,Charts,Google Visualization,Onclicklistener,我正在用谷歌地图在谷歌地图下画一个折线图。我的目标是当我点击图表上的一个点时,会在地图上弹出一个信息窗口。我已经实现了它,它工作得很好,除了:如果我一直点击图表上的点,地图上的信息窗口工作得很好,但是一旦我点击了图表的标签(它应该会相应地高亮显示该行),一切都冻结了,我必须刷新整个页面。我的绘画功能: function drawChart(){ var seriesArr = []; var columnsArr = [0]; var dataTable = genDat

我正在用谷歌地图在谷歌地图下画一个折线图。我的目标是当我点击图表上的一个点时,会在地图上弹出一个信息窗口。我已经实现了它,它工作得很好,除了:如果我一直点击图表上的点,地图上的信息窗口工作得很好,但是一旦我点击了图表的标签(它应该会相应地高亮显示该行),一切都冻结了,我必须刷新整个页面。我的绘画功能:

function drawChart(){
    var seriesArr = [];
    var columnsArr = [0];
    var dataTable = genDataTable(seriesArr, columnsArr);    

    var dashboard = new google.visualization.Dashboard(document.getElementById('chart_div'));
    chart = new google.visualization.ChartWrapper({
            'chartType':'LineChart',
            'containerId': 'chart',
            'options':{
                    'chartArea': {'height': '80%', 'width': '95%'},
                    'vAxis': {'viewWindow': {'min': -10, 'max': 120}},
                    'legend':{'position': 'top'},
                    'interpolateNulls': true,
                    'series': seriesArr
            },
            'view': {'columns': columnsArr}
    });

    google.visualization.events.addListener(chart, 'ready', onReady);
    function onReady() {
        google.visualization.events.addListener(chart.getChart(), 'select', popInfoWindow
    }

    function popInfoWindow(){
        chartObject = chart.getChart();
        var ts = Date.parse(dataTable.getValue(chartObject.getSelection()[0].row, 0))/1000;
        //codes here to pop a infowindow on google map, basically is using the dot's timestamp to find lat/lng
    }

    var control = new google.visualization.ControlWrapper({
       'controlType': 'ChartRangeFilter',
       'containerId': 'control',
       'options': {
       'filterColumnIndex': 0,
         'ui': {
           'chartType': 'LineChart',
           'chartOptions': {
            'interpolateNulls': true,
             'chartArea': {'width': '95%'},
             'curveType': 'function',
           },
           'chartView': {
             'columns': columnsArr
           },
         }
       }
    });

    dashboard.bind(control, chart);
    dashboard.draw(dataTable);
}
如果我不碰图表的标签,一切都会好的。我想问题在于:

function onReady(){...}
在这个函数中,我添加了一个“选择”侦听器来捕捉我在图表点上的操作,但我想点击标签也是一种“选择”,所以它会引发一些冲突?我可以放弃点击标签突出显示线条的功能,但只保留地图上弹出信息窗口的功能,如何关闭标签选择侦听器或避免冲突

非常感谢您的时间和帮助


谢谢

您需要检查图表中所选内容的长度。数组的长度可以是零个元素(用户取消选择一个点),也可以包含多个元素(如果用户选择多个点)。图表中没有启用多个选择,因此只需测试数组的长度即可:

function popInfoWindow(){
    chartObject = chart.getChart();
    var selection = chartObject.getSelection();
    if (selection.length) {
        var ts = Date.parse(dataTable.getValue(selection[0].row, 0))/1000;
        //codes here to pop a infowindow on google map, basically is using the dot's timestamp to find lat/lng
    }
    else {
        // do something if the user deselects a point
    }
}
此外,此处还有一个语法错误:

function onReady() {
    google.visualization.events.addListener(chart.getChart(), 'select', popInfoWindow()
}
popInfoWindow
之后的
应该被删除,为了良好的编码实践,行应该以
结尾;

function onReady() {
    google.visualization.events.addListener(chart.getChart(), 'select', popInfoWindow);
}

您的事件处理程序可视化代码在没有Google Map API的情况下是否可以工作?您的意思是仅适用于图表?是的,它可以工作,单击/悬停标签将高亮显示线条,并且从不冻结。没关系…我自己解决它…因为当我单击标签getSelection()时将返回无效(null)值响应然后破坏谷歌的api。无论如何谢谢。是的,你是对的,我在一个块中编写了所有这些函数,我在这里拆分它们以获得更好的外观,然后复制错误。是的,我注意到了这里的问题,我应该先检查长度。谢谢你的时间。