2009-04-27 12 views
9

Firebug informa un error de "devolución no en función" sin ubicación (bueno, línea 1 de nada). ¿Cómo puedo rastrear el origen de este error?Retorno no en la función

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

Estoy ejecutando FireBug 1.05 en FF 2.0.0.20 en Ubuntu.

he encontrado una solución que funciona (para esta configuración):

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

El código fue en un bucle en el que el id estaba cambiando, que requiere la función de captura.

Antiguamente el href era 'javascript: return 0' y la función de captura no devolvía el mensaje falso directamente, sino que usaba el resultado de fn, y había una ruta cuando devolvía el equivalente de verdadero. El href estaba siendo evaluado causando el error.

La definición de href como '#' o '' provocó que todos los enlaces aparecieran como ya visitados. No definir href en absoluto provocó que no haya ningún enlace resaltado. Esto parecía más simple.

Respuesta

6

Creo que el "javascript: return ..." es revelador. Creo que está tratando de devolver un valor en el atributo href de un ancla, de la siguiente manera:

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

La razón Firebug no le está diciendo que la ubicación es porque no es de ninguna JavaScript, pero es más bien en un one-liner en el DOM.

+0

Parece que sí. Estoy usando javascript para generar un enlace con una función onclick y estableciendo el atributo href del enlace. La función onclick devuelve falso al final de su operación y pensé que esto evitaría que se evaluara el href. Como esto acaba de comenzar, me pregunto si algo anterior en la función onclick se está comportando de manera diferente. – dougfelt

+0

¿Podríamos ver el código exacto de su enlace?"Devolver falso" está bien dentro de un clic; detiene el href de ser evaluado. Pero si lo usa de esta manera, el href debería ser una URL, no más JS. –

+1

Esta es una buena explicación de cómo usar onclick para evitar que se carguen los anclajes: http://www.javascripttoolbox.com/bestpractices/#onclick –

1

Voy a arriesgarme a suponer que esto significa que tiene un corsé de cierre adicional, o una abrazadera de apertura faltante.

¿Su base de código es prohibitivamente grande para hacer una comprobación al azar de cada una de sus funciones de retorno? ¿Tiene un IDE que destaque los apoyos correspondientes para usted?

4

Javascript devuelve un error porque la declaración de devolución no está dentro de una función. Una posible causa de esto es la definición de función incorrecta, como por ejemplo:

myFunc() { some code; return; } 

donde la definición de código correcta es:

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

Tengo esto al escribir en la ventana de la consola de Firebug. Escribí un ciclo for para buscar algo en una lista no intente y devuelva un valor allí; simplemente asígnelo a una variable y podrá ver el objeto/valor en la consola.

0

Daniel Lew tiene la respuesta para dougfelt, pero los que obtengan este error también deberían buscar cualquier declaración de devolución que no resida en una función. Por ejemplo:

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

return false; es fuera de cualquier función, y hará que este error.

Cuestiones relacionadas