2016-12-20 3 views
-1

Mein JavaScript lesen:Uncaught Typeerror: kann Eigenschaft foo undefinierter

todo.completed = !todo.completed; 

ERROR:

Uncaught TypeError: Cannot read property 'completed' of undefined 
    at Object.toggleCompleted (script.js:34) 
    at Object.toggleCompleted (script.js:89) 
    at HTMLButtonElement.onclick ((index):33) 
toggleCompleted @ script.js:34 
toggleCompleted @ script.js:89 
onclick @ (index):33 

Fehle ich etwas hier?

+4

ersetzen haben erklärt, Sie 'todo', wie' var todo = {} ' –

+1

Der Fehler ist ziemlich selbsterklärend. Was ist damit verwirrend? – Taplar

Antwort

0

Es sieht so aus, als ob Sie die Variable todo noch nicht deklariert haben. Versuchen Sie etwas wie todo = {}; Lassen Sie mich wissen, wenn Sie Fragen haben!

0

Die Variable todo ist aus scope herausgefallen. Es ist wahrscheinlich in einer Funktion deklariert, die außerhalb der Schließung von handlers.toggleCompleted() liegt, wenn es aufgerufen wird.

Es gibt ein paar Möglichkeiten, dies zu beheben, aber als die einfachste können Sie einfach todo global machen:

  1. var todo Suchen und entfernen Sie var von Anfang an.
  2. An der Spitze Ihres JS hinzufügen var todo = {};

Diese todo ein globales Objekt machen, die auf Ihrer Seite immer definiert ist.

+0

@ mb432 Dies kann gut für Sie arbeiten, aber es ist eine schlechte Angewohnheit, in zu gehen. Wenn Sie es jetzt verwenden, um anzufangen, legen Sie eine große mentale Notiz an Ort und Stelle, um bessere Möglichkeiten zu lernen, wie Sie mit dieser Idee umgehen können. Sie müssen Namespaces und andere Optionen untersuchen, um eine sicherere und nachhaltigere Lösung zu finden. Aber für den Moment, wenn es funktioniert, dann benutze es. Lass die Perfektion nicht der Feind von gut genug sein. – jwpfox

+0

@jwpfox ja, ganz, all das. Sie sprechen über die beste Vorgehensweise, wenn das OP Bereiche und Schließungen nicht versteht. Eine globale Variable beizubehalten ist ein beschissener Weg, um dieses Problem zu lösen, aber es ist das einfachste. – Keith

0

Was so verwirrend ist, ist, dass der Code in Plunkr, Glitch oder Codepen funktionieren wird, aber kein Texteditor und Browser, wegen der Art, wie das Routing dieser Seiten eingerichtet wird. In Ihrer Datei index.html müssen Sie <script src = "filename.js></script> mit <script src="entire path to filename.js"></script>

Verwandte Themen