我正在使用图表的Google可视化API遇到这种情况。当用户单击图表项时,它会调用一个打开弹出窗口的事件处理程序(但在下面的示例中,只是执行警报)。它有效,但只有一次;单击该项后,它将保持选中状态,因此不会再次触发事件处理程序(正在侦听'select'事件)。
文档说调用setSelection()方法并传入任何内容,null或空数组作为参数,这将取消选择所有内容。但是当我在事件处理程序的末尾添加它时,它实际上重新选择了所选项并陷入了无限循环。我的代码的简化工作版本如下:
<!---Google Charts--->
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
google.charts.load("current", {packages:["timeline"]});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var container = document.getElementById('timelineholder');
var chart = new google.visualization.Timeline(container);
var dataTable = new google.visualization.DataTable();
var options = {tooltip: {isHtml: true}};
//Add columns
dataTable.addColumn({type: 'string', id: 'Employer'});
dataTable.addColumn({type: 'string', id: 'Job ID'});
dataTable.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}});
dataTable.addColumn({type: 'date', id: 'Start Date'});
dataTable.addColumn({type: 'date', id: 'End Date'});
//Add Rows
dataTable.addRows([
['Some Company',
'123456',
'Some Tooltip Text',
new Date(2016,1,1,0,0,0,0),
new Date(2016,8,1,0,0,0,0)],
]);
chart.draw(dataTable, options);
//make rows clickable
google.visualization.events.addListener(chart, 'select', function(){
var selectedItem = chart.getSelection()[0];
var placementId = dataTable.getValue(selectedItem.row, 1);
alert(placementId);
chart.setSelection();//this should effectively deselect the row so it can be clicked on again and fire off the handler again. Instead, it's re-selecting the selected row and causing an infinite loop
});
}
</script>
<div id="timelineholder" class="timelineholder"></div>
答案 0 :(得分:1)
ax = sns.boxplot(x="value", y="combined_delta", data=df)
图表是我唯一没有Timeline
method
因此导致错误
一旦选择了某些内容,就无法取消选中(在setSelection
图表上)
没有重新绘制图表
尝试...
Timeline
而不是...
chart.draw(dataTable, options);
答案 1 :(得分:0)
仅作记录:我在使用Google图表的时间轴进行无限循环时遇到困难,我发现我在第二列(标签)中填充了“数字”而不是“字符串”。我只是打电话给.toString而问题消失了……
尽管如此,我还是无法复制它。
我也在使用ng2-google-charts。
也许可以帮助其他人。