Hello Arthur,
I couldn't figure out why your code wasn't working so I started over. Two ways of doing this came to mind, one way is to draw the charts then use a button to toggle the display property of the divs on and off. The other way was to redraw the charts on a button click in a single div.
Method 1 - hide/display the chart divs
The code for this is:
<script type="text/javaScript">
// Create a namespace
var pizzas = (function() {
// Load Charts and the corechart package.
google.charts.load('current', {'packages':['corechart']});
// Draw the pie chart for Sara's pizza when Charts is loaded.
google.charts.setOnLoadCallback(drawSaraChart);
// Draw the pie chart for the Tony's pizza when Charts is loaded.
google.charts.setOnLoadCallback(drawTonyChart);
// Callback that draws the pie chart for Sara's pizza.
function drawSaraChart() {
// Create the data table for Sara's pizza.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows([
['Mushrooms', 1],
['Onions', 1],
['Olives', 2],
['Zucchini', 2],
['Pepperoni', 1]
]);
// Set options for Sara's pie chart.
var options = {title:'How Much Pizza Sara Ate Last Night',
width:400,
height:300};
// Instantiate and draw the chart for sara's pizza.
var chart = new google.visualization.PieChart(document.getElementById('sara_chart_div'));
chart.draw(data, options);
}
// Callback that draws the pie chart for tony's pizza.
function drawTonyChart() {
// Create the data table for Tony's pizza.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows([
['Mushrooms', 2],
['Onions', 2],
['Olives', 2],
['Zucchini', 0],
['Pepperoni', 3]
]);
// Set options for Tony's pie chart.
var options = {title:'How Much Pizza Tony Ate Last Night',
width:400,
height:300};
// Instantiate and draw the chart for Tony's pizza.
var chart = new google.visualization.PieChart(document.getElementById('tony_chart_div'));
chart.draw(data, options);
}
})();
</script>
and the HTML is:
<button onclick="showhidePizza()">Toggle Charts</button>
<div id="sara_chart_div" style="display:none;"></div>
<!-- <div id="sara_chart_div"></div> -->
<div id="tony_chart_div"></div>
and the code for the button is:
<script language="javaScript">
function showhidePizza() {
var saraDiv = document.getElementById("sara_chart_div");
var tonyDiv = document.getElementById("tony_chart_div");
if (saraDiv.style.display === "none") {
saraDiv.style.display = "block";
tonyDiv.style.display = "none";
} else {
saraDiv.style.display = "none";
tonyDiv.style.display = "block";
}
}
</script>
Method 2: - redraw the charts on a button click
The script is:
<script language="javaScript">
// Create a namespace
var speakers = (function() {
google.charts.load('current', {
'callback': function () {
var data1 = google.visualization.arrayToDataTable([
['Language', 'Speakers (in millions)'],
['Cat 1', 26], ['Cat 3', 16], ['Cat 2', 30]
]);
var data2 = google.visualization.arrayToDataTable([
['Language', 'Speakers (in millions)'],
['Cat 1', 100], ['Cat 3', 200], ['Cat 2', 300]
]);
var options = {
title: 'Indian Language Use',
legend: 'none',
pieSliceText: 'label',
slices: { 1: {offset: 0.2},
2: {offset: 0.3},
3: {offset: 0.4},
4: {offset: 0.5},
},
animation: {
startup:true,
duration: 1000,
easing: 'in'
}
};
var chart = new google.visualization.PieChart(document.getElementById('language_div'));
chart.draw(data1, options);
document.getElementById('toggleData').addEventListener('click', function () {
var btnValue = document.getElementById('toggleData').value;
if (btnValue == "0"){
chart.draw(data1, options);
btnValue = "1";}
else {
chart.draw(data2, options);
btnValue = "0";}
document.getElementById('toggleData').value = btnValue;
}, false);
document.getElementById('data1').addEventListener('click', function () {
chart.draw(data1, options);
}, false);
document.getElementById('data2').addEventListener('click', function () {
chart.draw(data2, options);
}, false);
},
'packages':['corechart']
});
})();
</script>
The HTML is:
<button id="toggleData" value="1">Toggle Charts</button>
<input type="button" id="data1" value="Data1" />
<input type="button" id="data2" value="Data2" />
<div id="language_div"></div>