You must be logged in to post your query.
Home › Forums › Chart Support › Interactivity not working even when interactivityEnabled set to true
Hello, fantastic library, does pretty much what I need it to and really is fast.
However after creating a simple page that displays information about network speed tests and latency I’ve noticed that the interactivity of the charts are no longer working. I have 2 charts with 2 lines on each coming from 2 separate CSV files.
The interactivity used to work but somewhere along the line it seems to have stopped. I apparently didn’t notice and kept making more changes.
I tried to get it working on JSFiddle but it wouldn’t work. I then tried forking the example provided but that didn’t work also.
This is the index html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Speedtests/Latency</title>
<style>
body {background-color: black;}
div {width:100%; height:520px;}
table {width:100%; height:520px; color: white; border: 1px solid white;}
tr td {width: 50%; border: 1px solid white; text-align: center;}
</style>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript" src="canvasjs.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "GET",
url:"speedtests.csv",
dataType: "text",
success: function(data) {processCSV(data, "downUpContainer", "Upload & Download Speed", "Speed (MBps)", "Download", "Upload");}
});
$.ajax({
type: "GET",
url:"pings.csv",
dataType: "text",
success: function(data) {processCSV(data, "pingsContainer", "ISP & Google Ping", "Latency (ms)", "ISP Gateway", "Google");}
});
$.ajax({
type: "GET",
url:"hiLoAvg.txt",
dataType: "text",
success: function(data) {populateTable(data);}
});
});
function processCSV(allText, containerID, titleText, axYTitle, legend1Text, legend2Text) {
var allLinesArray = allText.split("\n");
if( allLinesArray.length > 0 ){
var dataPoints1 = [];
var dataPoints2 = [];
for (var i = 0; i <= allLinesArray.length-1; i++) {
var rowData = allLinesArray[i].split(",");
if(rowData && rowData.length > 1) {
dataPoints1.push({ y:parseFloat(rowData[0]) });
dataPoints2.push({ y:parseFloat(rowData[1]) });
}
}
var chart = new CanvasJS.Chart(containerID, {
interactivityEnabled: true,
animationEnabled: true,
zoomEnabled: true,
backgroundColor: "black",
title:{
text: titleText,
fontColor: "white",
fontSize: 25
},
axisX:{
title:"Test Number",
labelFontColor: "white",
titleFontColor: "white",
titleFontSize: 20,
labelFontSize: 15
},
axisY:{
title: axYTitle,
labelFontColor: "white",
titleFontColor: "white",
titleFontSize: 20,
labelFontSize: 15,
interval: 1,
gridThickness: 0.25,
interlacedColor: "#06060d"
},
legend: {
horizontalAlign: "center",
verticalAlign: "top",
fontSize: 15,
fontColor: "white"
},
data: [{
type: "line",
lineThickness: 1,
showInLegend: true,
markerType: "circle",
legendText: legend1Text,
dataPoints: dataPoints1
},
{
type: "line",
lineThickness: 1,
showInLegend: true,
markerType: "triangle",
legendText: legend2Text,
dataPoints: dataPoints2
}]
});
chart.render();
}
}
function populateTable(allText) {
var ids = ['avDown', 'av100Down', 'avUp', 'av100Up', 'highestDownDate', 'highestDown', 'lowestDownDate', 'lowestDown', 'highestUpDate', 'highestUp', 'lowestUpDate', 'lowestUp' ];
var allLinesArray = allText.split("\n");
for (var i = 0; i < ids.length; i++) {
document.getElementById(ids[i]).innerHTML = allLinesArray[i];
}
}
</script>
</head>
<body>
<div id="downUpContainer"></div>
<br />
<div id="pingsContainer"></div>
<br />
<table>
<tr>
<td>Average Download</td><td id="avDown"></td>
</tr>
<tr>
<td>Last 100 Average Download</td><td id="av100Down"></td>
</tr>
<tr>
<td>Average Upload</td><td id="avUp"></td>
</tr>
<tr>
<td>Last 100 Average Upload</td><td id="av100Up"></td>
</tr>
<tr>
<td rowspan=2>Highest Download</td><td id="highestDownDate"></td>
</tr>
<tr>
<td id="highestDown"></td>
</tr>
<tr>
<td rowspan=2>Lowest Download</td><td id="lowestDownDate"></td>
</tr>
<tr>
<td id="lowestDown"></td>
</tr>
<tr>
<td rowspan=2>Highest Upload</td><td id="highestUpDate"></td>
</tr>
<tr>
<td id="highestUp"></td>
</tr>
<tr>
<td rowspan=2>Lowest Upload</td><td id="lowestUpDate"></td>
</tr>
<tr>
<td id="lowestUp"></td>
</tr>
</table>
</body>
</html>
speedtest.csv looks like this: http://pastebin.com/raw/KMit3naJ
pings.csv looks like this: http://pastebin.com/raw/jcAACBzU
hiLoAvg.txt looks like this: http://pastebin.com/raw/FqnW0zE8
cgar,
Please take a look at this jsfiddle.
Thank you so much!
How strange that setting the container div sizes in the head section breaks interactivity. I take it thats a bug?
And thanks for showing me how to get it working on jsFiddle. I see now that trying to add document.ready to the javascript was what was causing it to break.
Should I now create a bug report?
It’s not a bug. ToolTip is a Dom-element, so whenever you assign height to all div elements, it will be applicable even for tooltip. It’s suggested to apply height based on class or id of div.
Ah I see. I thought I should ask just in case. I’ve changed it to:
#downUpContainer, #pingsContainer {height: 520px; width: 100%;}
and it works fine.
Thank you for your help. =)
CanvasJS is not defined at window.onload?chart not loading but page occupy
You must be logged in to reply to this topic.