views:

203

answers:

1

I'm running the following code. The button basically adds a chart into the html page. The problem I'm facing is: when I click on the button for the second time, the curve of the former chart fades away (though the labels don't), and I want it to stay. I've tried to debug and this happens when I modify the innerHTML property right at the beginning of the buttonClicked javascript function. Can anybody tell me why is this happening?

<html>
<head>
<title>Configurando gráficos</title>
<script language="javascript" type="text/javascript" src="../scripts/jquery.js"></script>
<script language="javascript" type="text/javascript" src="../scripts/jquery.flot.js"></script>
<script type="text/javascript" language="javascript">

var id = 0;

function requestGraph(placeholder) {
  $.ajax({url: "../requests/get_xml_oid.php?oid=1.3.6.1.2.1.2.2.1.10.65540&host=200.234.199.161", success: function(request){
        // Initialize dataToDraw to an empty array
        var dataToDraw = [];

        // The first tag is called ifInOctets      
        var ifInOctetsEl = request.getElementsByTagName("ifInOctets")[0];

        // Store the data element, to loop over the time-value pairs      
        var dataEl = ifInOctetsEl.getElementsByTagName("data");

        // For each data element, except the first one
        var i;
        for (i=1; i<dataEl.length; i++){
            // get the time-value pair
            var timeEl = dataEl[i].getElementsByTagName("time")[0];
            var valueEl = dataEl[i].getElementsByTagName("value")[0];
            var time = timeEl.textContent;
            var value = valueEl.textContent;

            // get the value of the former data element
            // Warning: the former value in the XML file is newer than the latter
            var formerValueEl = dataEl[i-1].getElementsByTagName("value")[0];
            var formerValue = formerValueEl.textContent;

            // push to the dataToDraw array
            dataToDraw.push( [parseInt(time)*1000, parseInt(formerValue) - parseInt(value)]);

        }

        // tell the chart that the x axis is a time variable
        var options = {
            xaxis: { mode: "time"}
        };

        // plot the chart and place it into the placeholder
        jQuery.plot(jQuery(placeholder), [dataToDraw], options);

      }});
}
function buttonClicked() {
    document.getElementById("body").innerHTML += "<div id=\"placeholder" + id + "\" style=\"width:600px;height:300px;\"></div>";
    requestGraph("#placeholder" + id);
    setInterval("requestGraph(\"#placeholder" + id + "\")",60000);
    id = id + 1;
}

</script>
</head>
<body id="body">
<button type="button" onClick="buttonClicked()">Click Me!</button>
</body>
</html>
A: 

According to this previous question, assigning to innerHTML destroys child elements. It's not clear to me that this is exactly what you're seeing, but perhaps using document.createElement as suggested in the similar question will work for you as well.

Dave Bacher