2010-12-20 14 views
9

Ich habe ein Skript, um ein Modellfenster zu öffnen. Chrome gibt mir "Uncaught SyntaxError: Unexpected token}" in einer Zeile, die nicht einmal eine schließende geschweifte Klammer hat. HierUnerwartetes Token}

ist der Teil des Skripts, die den Fehler hat:

function showm(id1){ 
    window.onscroll=function(){document.getElementById(id1).style.top=document.body.scrollTop;}; 
    document.getElementById(id1).style.display="block"; 
    document.getElementById(id1).style.top=document.body.scrollTop; 
} 

Hat jemand irgendwelche Ideen dazu? Jede Hilfe wird geschätzt.

+4

Ich kann nichts falsches dabei sehen (außer dass Sie versuchen, Integer CSS-Eigenschaften zuzuweisen, die Längen erfordern). Ich vermute, der Fehler liegt in irgendeinem umgebenden Code. – Quentin

+1

Dieser Code, den Sie gepostet haben, verursacht keinen Syntaxfehler. Ist das wirklich ** alles ** deines Skripts? Nichts in diesem Code sieht so aus, als hätte er etwas damit zu tun, ein Fenster zu öffnen. – Pointy

+0

es öffnet nicht wirklich ein Fenster, es macht nur ein div, das modale "Fenster", sichtbar. und nein, es ist nicht alles. aber der Rest des Codes ist nicht dort, wo das Problem liegt. und plus, es mag 100 Zeilen. möchtest du, dass ich das poste? –

Antwort

19

Versuchen Sie, das gesamte Skript über jslint auszuführen. Dies kann Ihnen helfen, auf die Ursache des Fehlers hinzuweisen.

Bearbeiten Ok, es ist nicht ganz die Syntax des Skripts, das ist das Problem. Zumindest nicht auf eine Weise, die jslint erkennen kann.

Nachdem bei http://ft2.hostei.com/ft.v1/ mit Ihrem Live-Code gespielt, es sieht aus wie es Syntaxfehler in dem generierten Code die Ihr Skript in dem DOM in ein onclick Attribut legt. Die meisten Browser sind nicht sehr gut darin, Fehler in JavaScript zu melden, das über solche Dinge ausgeführt wird (was ist die Datei- und Zeilennummer eines Skriptstücks im onclick Attribut eines dynamisch eingefügten Elements?). Dies ist wahrscheinlich der Grund, warum Sie in Chrome eine verwirrende Fehlermeldung erhalten. Die FireFox-Fehlermeldung ist anders und hat auch keine nützliche Zeilennummer, obwohl FireBug den Code anzeigt, der das Problem verursacht.

Dieser Code-Schnipsel aus Ihrer edit Funktion übernommen, die im Inline-Skriptblock Ihres HTML ist:

var sub = document.getElementById('submit'); 
... 
sub.setAttribute("onclick", "save(\""+file+"\", document.getElementById('name').value, document.getElementById('text').value"); 

Beachten Sie, dass dies setzt das onclick Attribut eines Elements zu ungültig JavaScript-Code:

<input type="submit" id="submit" onclick="save("data/wasup.htm", document.getElementById('name').value, document.getElementById('text').value"> 

Die JS ist:

save("data/wasup.htm", document.getElementById('name').value, document.getElementById('text').value 

Beachten Sie die fehlenden Schließen, um den Anruf zu save zu beenden.

Nebenbei, das Einfügen von onclick-Attributen ist keine sehr moderne oder saubere Möglichkeit, Ereignishandler in JavaScript hinzuzufügen. Warum verwenden Sie nicht die des DOM, um einfach eine Funktion an das Element anzuschließen? Wenn Sie etwas wie jQuery verwenden, wäre dies noch einfacher.

+0

danke! Dieser Fehler hat so viel Zeit verschwendet! Danke noch einmal! –

+0

@ tann98 Gern geschehen. Beginnen Sie stattdessen mit 'addEventListener', um Dinge mit Funktionen zu verbinden, die in Ihrer JavaScript-Datei definiert sind, und Sie erhalten von nun an korrekte Zeilennummern für Ihre Syntaxfehler. Damit hätten Sie allein Stunden für dieses Problem gespart 'eval' aus dem gleichen Grund. Viel Glück – Day

+0

Ich werde dies im Auge behalten für alle meine Javascript zu kommen. heres das Ergebnis: http://ft.comli.com/ft.v1 (andere Seite, weil andere nicht laden würde) –

2

Sie haben endlose Schleife anstelle:

function save() { 
    var filename = id('filename').value; 
    var name = id('name').value; 
    var text = id('text').value; 
    save(filename, name, text); 
} 

Keine Ahnung, was Sie mit dieser Endlosschleife erreichen wollen, sondern vor allem, es loszuwerden und sehen, ob die Dinge arbeiten.

+0

bist du sicher? Ich kann das nicht finden ... und ich denke, dass diese Funktion seitdem geändert wurde. Es sollte nicht save() aufgerufen werden, stattdessen save_f() –

+0

diese Funktion wurde von diesem Zeitpunkt an geändert. –