2009-04-27 21 views
9

Firebug zgłasza błąd "return not in function" bez lokalizacji (no, linia 1 z niczego). Jak mogę znaleźć źródło tego błędu?Zwrot nie w funkcji

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

Używam FireBug 1.05 na FF 2.0.0.20 na Ubuntu.

I znaleziono roztwór które działa (w tej konfiguracji):

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

kod został w pętli, w którym identyfikator zmienia się, co wymaga funkcji przechwytywania.

Dawniej href był "javascript: return 0", a funkcja przechwytywania nie zwracała bezpośrednio false, zamiast tego używała wyniku fn, a była ścieżka, która zwracała odpowiednik wartości true. Href był oceniany powodując błąd.

Określenie href jako "#" lub "spowodowało, że wszystkie linki pojawiły się jako już odwiedzone. Brak definicji href spowodował brak podświetlania linków. To wydawało się najprostsze.

Odpowiedz

6

Myślę, że "javascript: return ..." mówi. Wierzę, że starasz się zwrócić wartość w atrybucie kotwicy href, jak poniżej:

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

Powodem Firebug nie jest informacją, lokalizacja jest, bo nie jest w żaden JavaScript, ale jest raczej w jedno-liniowy w DOM.

+0

Wygląda jak to. Używam javascript do wygenerowania łącza z funkcją onclick i ustawienia atrybutu href linku. Funkcja onclick zwraca wartość false pod koniec operacji i myślałem, że to uniemożliwi ocenę href. Ponieważ to się zaczęło nie udać, zastanawiam się, czy coś wcześniej w funkcji onclick zachowuje się inaczej. – dougfelt

+0

Czy możemy zobaczyć dokładny kod linku?"Return false" jest w porządku w onclick; zatrzymuje ocenę hrefa. Ale jeśli używasz go w ten sposób, sam href powinien być adresem URL, a nie więcej JS. –

+1

To jest dobre wytłumaczenie, jak używać onclick, aby zapobiec ładowaniu zakotwiczeń: http://www.javascripttoolbox.com/bestpractices/#onclick –

1

Zamierzam zaryzykować przypuszczenie, że oznacza to, że masz dodatkowy nawias klamrowy lub brakujący nawias klamrowy.

Czy Twój kod jest zbyt duży, aby przeprowadzić kontrolę na miejscu wokół każdej funkcji zwrotu? Czy masz IDE, który podkreśla dla ciebie dopasowane szelki?

4

Javascript zwraca błąd, ponieważ instrukcja return nie znajduje się w funkcji. Możliwą przyczyną jest błędna definicja funkcji, takich jak:

myFunc() { some code; return; } 

gdzie kod jest poprawna definicja:

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

mam to po wpisaniu w oknie konsoli w Firebug. Napisałem pętlę for, aby wyszukać coś na liście nie próbuj i zwróć wartości tam - po prostu przypisz ją do zmiennej i możesz zobaczyć obiekt/wartość w konsoli.

0

Daniel Lew ma odpowiedź dla dougfelt, ale inni, którzy otrzymają ten błąd, powinni również zwrócić uwagę na instrukcję zwrotu, która nie znajduje się w funkcji. Na przykład:

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

return false; jest poza wszelką funkcją i spowoduje ten błąd.