2017-05-08 2 views
0

Dies ist und es wird Optionen aus einer jsTree Checkbox Baumliste:Warum enthält diese Warnung undefined? mein Code

var level1, r = []; 

for (i = 0, j = data.selected.length; i < j; i++) { 
    r[0] = data.instance.get_node(data.selected[i]).text.trim(); 
    r[1] = data.instance.get_node(data.selected[i]).parents.length; 

    if(r[1] == 1) { 
     level1 += r[0] + ", "; 
     alert(level1); 
    } 
} 

Die alert der oben enthält undefined zusammen mit den richtigen Entscheidungen von den Kontrollkästchen. Irgendeine Idee, warum ich in der Ausgabe undefiniert bin?

+0

Bitte posten Sie Ihre HTML-Code als auch zum besseren Verständnis. –

+0

'var level1; var r = []; 'Und' level1 = r [0] + ";"; probiere das –

+4

Deine level1 var ist undefiniert .. lege einen leeren String an, damit du verketten kannst –

Antwort

1

Das Problem ist, dass level1 nicht definiert ist, wenn Sie es zuerst versuchen, hier zu verwenden:

level1 += r[0]+", "; 

Das ist das gleiche wie:

level1 = level1 + r[0]+", "; 

Das Problem level1 ist nicht definiert, die erste Iteration durch und so der Text enthält undefined und Verkettung verkettet "undefined" als eine Zeichenfolge, wie es erzwungen wird. Initialisieren Sie es auf eine leere Zeichenfolge:

var level1 = ""; 

So wird es nicht undefiniert sein, wenn Sie darauf zugreifen.

+0

Wie Herr Aliens Beitrag oben .... Ich kann nicht glauben, dass ich das verpasst habe ... –

+0

@Homer_J und Sie als nächstes Frage ist, wie man kein abschließendes Komma hat. ;) – epascarello

+0

@epascarello Ich dachte die gleiche Sache xD –

0

Diese

var level1, r = []; 
 

 
for (i = 0, j = data.selected.length; i < j; i++) { 
 
    r[0] = data.instance.get_node(data.selected[i]).text.trim(); 
 
    r[1] = data.instance.get_node(data.selected[i]).parents.length; 
 

 
    if(r[1] == 1){ 
 
     level1 += r[0]+", "; 
 
     alert(level1); 
 
    } 
 
}

Sollte

var level1 = ''; 
 
    //Or leve1 = []; If you really need it as an array. 
 
var r = []; 
 

 
for (i = 0, j = data.selected.length; i < j; i++) { 
 
    r[0] = data.instance.get_node(data.selected[i]).text.trim(); 
 
    r[1] = data.instance.get_node(data.selected[i]).parents.length; 
 

 
    if(r[1] === 1){ 
 
     // level1[0] += r[0]+", "; If array. 
 
     level1 += r[0]+", "; 
 
     alert(level1); 
 
     // alert(level1[0]); If array. 
 
    } 
 
}

Das sein level1 ist undefined seit level1, r = [] macht r === [] und level1 === undefined.

Also ich schlage vor, dass Sie beide Variablen explizit deklarieren, wie im Codeblock oben gezeigt.

Auch feste I Vergleichsoperatoren, see here why

+0

Dank ArchNoob - geschätzt. String war in der Tat das Problem, aber das obige löst ein anderes Problem, mit dem ich anderswo konfrontiert war! –

+0

[email protected]_J – ArchNoob

+0

"Ist ein Array seit du es als ... deklariert hast" - wo siehst du das? Sie verketten explizit eine Zeichenfolge, so ist es wahrscheinlich eine Zeichenfolge – Li357