views:

2021

answers:

3

Firebug is reporting a "return not in function" error with no location (well, line 1 of nothing). How can I track down the source of this error?

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

I'm running FireBug 1.05 on FF 2.0.0.20 on Ubuntu.

I found a solution that works (for this configuration):

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

The code was in a loop in which the id was changing, necessitating the capture function.

Formerly the href was 'javascript: return 0' and the capture function wasn't returning false directly, instead using the result of the fn, and there was a path when it was returning the equivalent of true. The href was being evaluated causing the error.

Defining href as '#' or '' caused all the links to appear as already visited. Not defining href at all caused there to be no link highlighting. This seemed simplest.

+1  A: 

I'm going to hazard a guess that this means you have an extra closing brace, or a missing opening brace.

Is your codebase prohibitively large to do a spot check around each of your return functions? Do you have an IDE that highlights matching braces for you?

Peter Bailey
+4  A: 

I think the "javascript:return ..." is telling. I believe you're trying to return a value in the href attribute of an anchor, as below:

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

The reason Firebug isn't telling you the location is because it's not in any JavaScript, but is rather in a one-liner in the DOM.

Daniel Lew
Looks like it. I'm using javascript to generate a link with an onclick function, and setting the href attribute of the link. The onclick function returns false at the end of its operation and I thought this would prevent the href from being evaluated. Since this just started failing I'm wondering if something earlier in the onclick function is behaving differently.
dougfelt
Could we see the exact code for your link? "Return false" is okay inside of an onclick; it stops the href from being evaluated. But if you're using it this way, the href itself ought to be a URL, not more JS.
Daniel Lew
This is a good explanation for how to use onclick to prevent anchors from being loaded: http://www.javascripttoolbox.com/bestpractices/#onclick
Daniel Lew
Thanks, that was it.
dougfelt
+1  A: 

Javascript returns an error because the return statement is not inside a function. A possible cause for this is incorrect function definition, such as:

myFunc() { some code; return; }

where the correct code definition is:

function myFunc() { some code; return; }
Yevgeny Doctor