2009-06-28 24 views

Respuesta

60

No sé por qué la definición de la función con el alcance de ready() es importante para usted, pero usted puede hacer que funcione declarando foo por adelantado:

<html><head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script> 
<script> 
var foo;       // Here's the difference 
$(document).ready(function(){ 
    foo = function() 
    { 
    alert('Bar'); 
    } 
}); 
</script></head><body> 
<input type="button" onclick="foo()" value="Click me"> 
</body></html> 

Obviamente no se puede llamar a la línea de foo() secuencia de comandos inmediatamente después de ready() porque el código ready() aún no se ha ejecutado, pero puede llamar a la función más adelante.

Sólo asegúrese de que nada puede tratar de llamar foo() antes del código ready() se ha quedado (o hacer la declaración inicial de foo() una función inofensivo).

+0

Gran idea. Gracias Richie! –

+0

¿Qué sucede si necesita llamar 'foo()' con algunos parámetros?¿Cómo los aprobaría, y cómo serían recibidos? –

+1

@ alonso.torres: Al igual que cualquier otra función JavaScript: 'foo = función (x, y, z) {...}' '... onclick = "foo (1, 2, 3)"' – RichieHindle

24

Puede pero se deben llamar dentro del alcance del método ready(), de lo contrario, pierden alcance cuando el método ready() se cierra.

Por ejemplo, el código de abajo funcionará:

$(document).ready(function(){ 
    function foo() 
    { 
    alert('Bar'); 
    } 

    foo(); // still in the scope of the ready method 
}); 
+1

¿Hay alguna forma de evitar esto? Cambiar el alcance? –

+8

Simple. Defínalos fuera del alcance .ready (...). No veo por qué estás tan apegado a hacer eso. ¿Qué beneficio podría ofrecerte? – Oli

+0

@Oli, hubiera sido mejor desde el punto de vista de la organización del código poder declararlo dentro del alcance .ready(). –

4

Su función se define dentro del alcance de la $(document).ready() de devolución de llamada y no puede ser visto de la fuera. Defina la función fuera del alcance $(document).ready() de solo llamar desde adentro.

5

Aparecerán como indefinidos si los coloca en cualquier ámbito que no sea de ellos. Si realmente desea utilizarlos fuera del alcance de $ (documento). Listo (...), entonces necesita declararlos externamente. Tales como:

var foo; 

$(document).ready(function(){ 
    foo = function() 
    { 
    alert('Bar'); 
    } 
}); 

foo(); // works now because it is in scope 

Espero que esto ayude.

+0

¿Por qué entonces funciona la solución Hari Om? –

+0

@jj_ solución de Hari Om 'funciona porque la llamada a myfnc es dentro del mismo ámbito que se declara en myfnc. – Nishan

+0

sí 'myfnc()' es llamada, pero ¿qué pasa con 'myfnc (param1, param2)' en la entrada evento onclick? –

1
<script> 
    $(document).ready(function(){ 
     myfnc = function (param1, param2) 
     { 
     alert('Hello'); 
     } 
     myfnc(); 
    }); 
</script> 
<input type="button" onclick="myfnc('arg1', 'arg2')" value="Click me"> 
0

Sólo otra adición:

Al declarar funciones o variables dentro de la función de $(document).ready(), éstos son inaccesibles cuando se utiliza onclick() se une en el documento.

Puede mover sus declaraciones fuera de $(document).ready(), o puede usar $('#element').on('click', function() {}) dentro de `$ (document) .ready().

Cuestiones relacionadas