2009-04-27 9 views
9

Firebug segnala un errore di "non ritorno in funzione" senza posizione (beh, riga 1 di nulla). Come posso rintracciare la fonte di questo errore?Restituire non in funzione

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

Sto eseguendo FireBug 1.05 su FF 2.0.0.20 su Ubuntu.

ho trovato una soluzione che funziona (per questa configurazione):

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; }; 
} 

Il codice sia in un ciclo in cui l'id stava cambiando, richiedendo la funzione di cattura.

Precedentemente l'href era 'javascript: return 0' e la funzione di cattura non restituiva direttamente false, utilizzando invece il risultato di fn, e c'era un percorso quando restituiva l'equivalente di true. L'href veniva valutato causando l'errore.

La definizione di href come '#' o '' ha causato la visualizzazione di tutti i collegamenti come già visitati. La mancata definizione di href ha causato l'assenza di evidenziazione del collegamento. Questo sembrava il più semplice.

risposta

6

Penso che "javascript: return ..." stia dicendo. Credo che si sta cercando di restituire un valore nell'attributo href di un ancoraggio, come di seguito:

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

Il motivo Firebug non sta dicendo la posizione è perché non è in alcun JavaScript, ma è piuttosto in un solitario nel DOM.

+0

Sembra. Sto usando javascript per generare un collegamento con una funzione onclick e l'impostazione dell'attributo href del collegamento. La funzione onclick restituisce false alla fine della sua operazione e ho pensato che questo avrebbe impedito di valutare l'href. Poiché questo ha appena iniziato a fallire, mi chiedo se qualcosa prima nella funzione onclick si comporti diversamente. – dougfelt

+0

Potremmo vedere il codice esatto per il tuo link?"Restituisci falso" va bene all'interno di un onclick; impedisce che l'href venga valutato. Ma se lo stai usando in questo modo, lo stesso href dovrebbe essere un URL, non più JS. –

+1

Questa è una buona spiegazione su come utilizzare onclick per impedire che vengano caricati ancore: http://www.javascripttoolbox.com/bestpractices/#onclick –

1

Ho intenzione di azzardare un'ipotesi che questo significa che hai un rinforzo di chiusura extra o un tutore di apertura mancante.

La tua base di codici è proibitivamente grande per eseguire un controllo a campione su ciascuna delle funzioni di restituzione? Hai un IDE che mette in evidenza le parentesi corrispondenti per te?

4

Javascript restituisce un errore perché l'istruzione return non è all'interno di una funzione. Una possibile causa di questo è definizione di funzione non corretta, come ad esempio:

myFunc() { some code; return; } 

in cui la definizione codice corretto è:

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

Ho ottenuto questo quando si digita nella finestra della console di Firebug. Avevo scritto un ciclo for per cercare qualcosa in un elenco non provare e restituire un valore in esso - basta assegnarlo a una variabile e puoi vedere l'oggetto/valore nella console.

0

Daniel Lew ha la risposta per dougfelt, ma altri che ottengono questo errore dovrebbero anche verificare eventuali dichiarazioni di reso che non risiedono in una funzione. Per esempio:

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

return false; è all'esterno di ogni funzione, e causerà questo errore.