2016-07-26 11 views
0

I d3.js bin mit Datenvisualisierung zu machen, aber ich bin kein Programmierer JavaScript, damit ich so etwas wie dieJavaScript Uncaught Referenz bei der Verwendung von setTimeout()

 for(var i =0;i<6;i++){ 
      setTimeout(function(){ 
      var in = data[0][i]; 
      slate(" + margin.left + "," + margin.top + ")"); 
      var svg = d3.select("#clustering").append("svg") 
        .attr("width", width + margin.left + margin.right) 
        .attr("height", height + margin.top + margin.bottom) 
        .append("g") 
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 
      svg.append("rect") 
        .attr("width", width) 
        .attr("height", height); 

      svg.append("g") 
        .attr("class", "x axis") 
        .attr("transform", "translate(0," + height + ")") 
        .call(xAxis); 

      svg.append("g") 
        .attr("class", "y axis") 
        .call(yAxis); 

      var color = d3.scale.category10(); 
      refreshGraph(); 
       },1000); 
      } 
     /* 
     * function displaying data on svg 
     * called every time data change 
     */ 
     var refreshGraph = function(){ 

      // removing all previously drawn dots 
      svg.selectAll(".dot") 
      .data(instruments) 
      .exit() 
      .remove(); 
      } 

folgenden schrieb Aber ich habe diesen Fehler Uncaught Reference Error: svg is not defined Ich weiß, Die Funktion refreshGraph kann die var svg nicht sehen, aber ich weiß nicht, wie ich das beheben kann. Vielen Dank für Ihre Hilfe.

+0

Wenn Sie setTimeout in einer Schleife verwenden, glaube ich, dass Sie es in anonyme Funktion mit Variable machen müssen. Ich hatte ähnliches Problem, aber nicht mit d3 – Riddell

+2

"Ich kenne die Funktion refreshGraph kann nicht sehen, die var svg" - Noch etwas anderes. Es erscheint nirgendwo in dem Code, den Sie freigegeben haben. – Quentin

+0

Nun, in diesem Stück Code, sehe ich nicht Svg irgendwo definiert ... – beerwin

Antwort

3

Entweder:

  • Definieren der Funktion können innerhalb der Funktion zu refreshGraph zuweisen geben Sie setTimeout so dass svg noch im Umfang ist oder
  • Deklarieren svgaußerhalb die Schleife ganz so bleibt es im Bereich oder
  • Pass svg zu dieser Funktion als ein Argument, wenn Sie Nennen Sie es