2009-08-27 9 views
5

Mein Gehirn auf diesem ein. Ich habe den folgenden Code: die ersten Schritte eines JavaScript-Spiels. Alle Objekte sind gut definiert und ich verwende jQuery für die DOM-Interaktion. Das Puzzle wird mit dem folgenden JS-Code erstellt:Warum stoppt meine for-Schleife nach einer Iteration?

var mypuzzle = new puzzle("{solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]}"); 

jedoch die Schleife am unteren Rande des Codes wird nicht weiter gehen als die erste Iteration. Irgendeine Idee warum? Es werden überhaupt keine Fehler ausgelöst.

function equationBox(equation, top, left) {//draggable equation box 
    this.reposition = function() { 
     this.top = 0; 
     this.left = 0; 
    } 
    this.top = 0;//make random 
    this.left = 0;//make random 
    this.equation = equation; 
    if(top && left) { 
     this.top = top; 
     this.left = left; 
    } 
    this.content = this.equation.LHS.string + '<span> = </span>' + this.equation.RHS.string; 
    this.DOM = $('<li>').html(this.content); 
} 


function puzzle(json) { 

    this.addEquationBox = function(equationBox) { 
     $('#puzzle #equations').append(equationBox.DOM); 
    } 

    this.init = function() { 
     //this.drawPuzzleBox(); 
     this.json = JSON.parse(json); 
     this.solution = new expression(this.json.solution || ''); 
     this.equations = this.json.equations || []; 
     var iterations = this.equations.length; 
     for(i=0;i<iterations;i++) 
     { 
      console.log(i); 
      this.addEquationBox(new equationBox(stringToEquation(this.equations[i][0]),this.equations[i][1], this.equations[i][2])); 
     } 
    } 
    this.init(); 
} 
+0

Was ist "Iterationen" eingestellt? – ChrisF

+0

Wo ist 'JSON.parse' definiert? –

+0

Was passiert, wenn Sie dies debuggen? – Charlie

Antwort

11

Möglicherweise Ihr Versagen Ihre Zählvariable es Umfang tut, vor allem, wenn Sie eine Gewohnheit daraus zu machen (da Sie die globale Variable dieses Namens verwenden, und alle Schleifen Sie in jedem Code geschrieben Sie‘ Re Calling kann das gleiche tun). Versuchen Sie:

for(var i=0;i<iterations;i++) 
+1

+1. DER klassische Javscript Gotcha. – AnthonyWJones

+0

Ausgezeichnet - danke – wheresrhys

1

weil this.equations = this.json.eqations || [], Und da this.json.equations nicht definiert ist, ist es auf []

+1

Das würde dazu führen, dass die Schleife für null Iterationen läuft, nicht eins. – chaos

+1

Warum glauben Sie, dass json.eqations nicht definiert ist? Wenn JSON die Eingabe json ein Para analysiert hat, sollte es ein Array sein – AnthonyWJones

+1

es ist eine Chance. Da wir nicht über das gesamte Projekt verfügen, um einen Blick darauf zu werfen, können wir nur Vermutungen anstellen und die Erfahrung verwenden, um mögliche Fehler vorzuschlagen. Ich habe gerade meine Kristallkugel benutzt. In der Tat könnte der Fehler plausibler sein als Ursache eines Bereichsfehlers, der "i" als globale Variable in der for-Anweisung verwendet. – Rodrigo

0

zugewiesen bekommen Angenommen, Sie JSON.parse definiert verwenden wie bei https://github.com/douglascrockford/JSON-js/blob/master/json2.js, scheint es, dass Ihre JSON-String-Parsing ist nicht richtig:

var string1 = "{solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]}" 
JSON.parse(string1); // throws SyntaxError("JSON.parse") 

Wenn ich JSON.stringify, in der gleichen Datei definiert, einen JSON-String aus dem Objekt zu erstellen:

var obj = {solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]} 
var string2 = JSON.stringify(obj); 
// {"solution":"5+6+89","equations":[["5+3=8",23,23],["5+1=6",150,23],["5+3=6",230,23]]} 
JSON.parse(string2); // returns a proper object 

Beachten Sie, dass die Zeichenfolge, die JSON.stringify schafft anders ist als die, die Sie zu versuchen, Verwenden Sie, was die Ursache Ihres Problems sein könnte.

Verwandte Themen