2009-04-27 26 views
9

Firebug meldet einen Fehler "Rückkehr nicht in Funktion" ohne Ort (na ja, Zeile 1 von nichts). Wie kann ich die Quelle dieses Fehlers aufspüren?Rückgabe nicht in Funktion

return not in function 
[Break on this error] return(0) 
javascript:return... (line 1) 

Ich starte FireBug 1.05 auf FF 2.0.0.20 auf Ubuntu.

Ich fand eine Lösung , die (für diese Konfiguration) arbeitet:

var link = document.createElement('a'); 
    link.href='/'; 
    if (childSummary.more) { 
    link.onclick = capture(function(id) { follow(id); }, childSummary.id); 
    } else { 
    link.onclick = capture(function(id) { show(id); }, childSummary.id); 
    } 
    link.appendChild(document.createTextNode(name)); 
    div.appendChild(link); 

    [...] 

function capture(fn, val) { 
    return function() { fn(val); return false; }; 
} 

Der Code in einer Schleife war, in dem die ID ändert, erforderlich macht, die Erfassungsfunktion.

Früher war die href 'javascript: return 0' und die Capture-Funktion gab nicht direkt false zurück, sondern das Ergebnis von fn, und es gab einen Pfad, als es das Äquivalent von true zurückgab. Der href wurde ausgewertet, wodurch der Fehler verursacht wurde.

Wenn Sie href als '#' oder '' definieren, werden alle Links als bereits besucht angezeigt. Kein Definieren von href überhaupt, da keine Link-Hervorhebung vorhanden ist. Dies schien am einfachsten.

Antwort

6

Ich denke, das "javascript: return ..." sagt. Ich glaube, Sie versuchen, einen Wert im href Attribute eines Anker zurückzukehren, wie unten:

<a href="javascript: return false">Test</a> 

Der Grund Firebug ist nicht Ihnen die Lage zu sagen ist, weil es nicht in jedem JavaScript, sondern ist vielmehr in ein One-Liner im DOM.

+0

Sieht so aus. Ich benutze Javascript, um einen Link mit einer onclick Funktion zu erzeugen, und setze das href Attribut des Links. Die onclick-Funktion gibt am Ende ihrer Operation false zurück und ich dachte, dies würde verhindern, dass die href ausgewertet wird. Da dies gerade fehlgeschlagen ist, frage ich mich, ob sich etwas früher in der Onclick-Funktion anders verhält. – dougfelt

+0

Konnten wir den genauen Code für Ihren Link sehen?"Return false" ist innerhalb eines onclick in Ordnung; Es stoppt die Auswertung des href. Aber wenn Sie es so verwenden, sollte das href selbst eine URL sein, nicht mehr JS. –

+1

Dies ist eine gute Erklärung dafür, wie man onclick verwendet, um zu verhindern, dass Anker geladen werden: http://www.javascripttoolbox.com/bestpractices/#onclick –

1

Ich werde eine Vermutung riskieren, dass dies bedeutet, dass Sie eine zusätzliche schließende Klammer oder eine fehlende öffnende Klammer haben.

Ist Ihr Codebase prohibitiv groß, um eine Stichprobe um jede Ihrer Rückkehrfunktionen zu machen? Haben Sie eine IDE, die passende Klammern für Sie hervorhebt?

4

Javascript gibt einen Fehler zurück, da die Rückgabeanweisung nicht in einer Funktion enthalten ist. Eine mögliche Ursache hierfür ist eine falsche Funktionsdefinition, wie zB:

myFunc() { some code; return; } 

wo der richtige Code Definition lautet:

function myFunc() { some code; return; } 
0

ich diese bekam, wenn sie in das Konsolenfenster in Firebug eingeben. Ich hatte eine for-Schleife geschrieben, um nach etwas in einer Liste zu suchen Versuchen Sie nicht und geben Sie dort einen Wert zurück - weisen Sie es einfach einer Variablen zu und Sie können das Objekt/den Wert in der Konsole sehen.

0

Daniel Lew hat die Antwort für dougfelt, aber andere, die diesen Fehler erhalten, sollten auch nach einer Rückgabeanweisung Ausschau halten, die nicht in einer Funktion enthalten ist. Zum Beispiel:

<script type="text/javascript"> 
    alert("I'm JavaScript!"); 
    return false; 
</script> 

return false; ist außerhalb jeder Funktion und wird diesen Fehler verursachen.

Verwandte Themen