Javascript 基于融合表的Google图表中的事件侦听器
我正在尝试使用GoogleFusion表和GoogleCharts来构建一个表,该表将响应下拉菜单中的更改 我非常关注这个例子: 我可以使用融合表中的数据绘制表格。该表将响应选择菜单而不会出现问题 我想实现一个selectHandler,它将存储用户选择的行的内容。我将把行的内容传递给其他函数,但是我无法让selectHandler正常工作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
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