2010-04-17 25 views
16

Tengo algunas funciones de Jquery que guardo en un archivo "custom.js". En algunas páginas, necesito pasar variables de PHP a Jquery, por lo que algunos bits de Jquery deben permanecer en los documentos HTML. Sin embargo, como ahora estoy tratando de refactorizar cosas al mínimo, estoy tropezando con lo siguiente:Jquery: funciones de llamada desde diferentes documentos

Si pongo esto en mis Custom.js:

$(document).ready(function() 
{ 
    function sayHello() { 
     alert("hello"); 
    } 
} 

Y esto en un documento HTML :

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     sayHello(); 
    }); 
</script> 

... no se llama a la función. Sin embargo, si ambos se colocan en el documento HTML, la función funciona bien.

¿Hay algún tipo de propiedad pública que deba declarar para la función o cómo obtengo las funciones de Jquery en mi HTML para hablar con archivos .js externos? Están correctamente incluidos y funcionan bien de lo contrario.

Gracias.

Respuesta

29

El problema es que está definiendo sayHello dentro de la función anónima que se declara en esta línea:

$(document).ready(function() 

Como resultado, sayHello tiene como alcance solamente esa función. Si desea llamar sayHello de cualquier otro lugar en su aplicación, tales como el HTML de la página o en otra línea Custom.js, tendrá que cambiar Custom.js y definirlo fuera de la llamada a $(document).ready:

function sayHello() 
{ 
    alert("hello"); 
} 

$(document).ready(function() 
{ 
    sayHello(); 
} 
+0

Gracias - por supuesto, tiene mucho sentido. Aceptará su respuesta, necesita esperar el límite de tiempo. – Tom

7

acaba de hacer la función de una variable global

sayHello=function() { 
    alert("hello"); 
} 
+0

¿funcionaría establecer el contenedor jquery como una var también? Me gusta 'sayHello = $ (document) .ready (function() {...' – tim

Cuestiones relacionadas