目前我正在谷歌geochart上苦苦挣扎。我正在尝试将事件监听器添加到geochart,该geochart使用标记来显示世界各国,当用户点击标记时,它会加载特定于国家/地区的数据。除了事件监听器之外,我的代码运行良好。现在,我知道当我使用chartwrapper对象时,我必须添加两个事件监听器,一个用于仪表板,一个用于仪表板事件监听器加载后的图表。当我使用区域而不是标记时,我设法让我的代码工作,但对于标记,我无法让它工作。它通常应该是同一个事件,基本上是'选择'但我不能让它工作。我已经发布了我的整个代码以获取全局图片,但您应该只关注事件监听器和相关的tableSelectHandler()函数。到目前为止,我已尝试删除函数中的所有代码并仅显示通用警报,但即使这样也无效。请帮忙 !非常感谢
var script_url = [
'/SymphonyAdminPanel/php/SQLSRV/finalshareByCountry.php',
'/SymphonyAdminPanel/php/SQLSRV/countryData.php',
'/SymphonyAdminPanel/php/salesdata.php'
];
var pn_1_data = null; //pn_1 datatable
var pn_1 = null; // pn_1 div
var pn_1_filter = null; // pn_1 filter
var pn_1_ch = null; // pn_1 chart
function pn_1_draw() {
// Create a dashboard.
pn_1 = new google.visualization.Dashboard(document.getElementById('pn_1'));
// Create a filter for our datatable
pn_1_filter = new google.visualization.ControlWrapper({
'controlType': 'NumberRangeFilter',
'containerId': 'pn_1_filter',
'options': {
'filterColumnIndex': 1, //Use filterColumIndex here & not filtercolumnIndex
}
});
// Chart wrapper object
pn_1_ch = new google.visualization.ChartWrapper({
'chartType' : 'GeoMap',
'containerId' : 'pn_1_ch',
'options': {
'dataMode' : 'markers',
'region' : 'world',
'fontName': 'Arimo',
'width': 900,
'height' : 500
}
});
//We bind the elements to our dashboard
pn_1.bind(pn_1_filter, pn_1_ch);
// Load Json data from server, create datatable & draw charts
$.getJSON(script_url[0], function(jresults){
//We use the datatable declared earlier and assign it our $.getJson object
pn_1_data = new google.visualization.DataTable(jresults.data);
//We draw the whole dashboard object and its bound elements
pn_1.draw(pn_1_data);
//We add an event listener to our dashboard which adds an event listener to the bound chart
google.visualization.events.addListener(pn_1, 'ready', function(){
google.visualization.events.addListener(pn_1_ch,'select', tableSelectHandler);
});
});
};
function tableSelectHandler(){
/*var selectedItem = pn_1_ch.getChart().getSelection()[0];
var country = pn_1_data.getValue(selectedItem.row, 2);
//Set the geochart region to the country selected
pn_1_ch.setOption('region',country);
//Load new JSON data
var url_updated = '/SymphonyAdminPanel/php/SQLSRV/countryData.php?&country='+country;
$.getJSON(url_updated, function(jresults){
pn_1_data = new google.visualization.DataTable(jresults.data);
pn_1.draw(pn_1_data);
}); */
alert('Its working');
};
答案 0 :(得分:2)
我认为这就是问题所在:
//We add an event listener to our dashboard which adds an event listener to the bound chart
google.visualization.events.addListener(pn_1, 'ready', function(){
google.visualization.events.addListener(pn_1_ch,'select', tableSelectHandler);
});
您正在添加一个等待pn_1准备就绪的事件侦听器,以便向pn_1_ch添加另一个事件侦听器。我认为它可能会干扰整个代码。也许你应该尝试单独添加事件。 另外,首先尝试不在addListener之外定义函数,只是为了查看函数是否正常工作。试试这个:
google.visualization.events.addListener(pn_1, 'ready', function(){ /*...*/ });
google.visualization.events.addListener(pn_1_ch,'select', function(){
alert("this is working");
});
似乎以这种方式编写我的代码对我来说总是更好。