2011-08-13 25 views
9

por lo que tienen un archivo .js que se incluye en mi html

Si pongo esto dentro de mi archivo .js,

$(document).ready(function(){  
     var siteRoot = $('.site-root').val(); 
     alert(siteRoot); 
}); 

el código alertaría al valor correctamente, pero si hago esto:

var siteRoot = $('.site-root').val(); 
$(document).ready(function(){ 
     alert(siteRoot); 
}); 

que alertaría indefinido en lugar

está ahí una manera de tener algo que está en $(document).ready() las variables de acceso fuera de ella ya que si pongo la variable dentro $(document).ready() no sería accesible desde otros archivos js

Respuesta

16

Puede que sea un mundial:

// this is the same as your example, 
// just wanted to stress that it's a part of the window (global) object 
window.siteRoot = $('.site-root').val(); 
$(document).ready(function(){ 
     alert(window.siteRoot); 
}); 

O mejor aún, utilizar algún tipo de espacio de nombres, como esto:

var MyData = {}; 
MyData.siteRoot = $('.site-root').val(); 

$(document).ready(function(){ 
    alert(MyData.siteRoot); 
}); 
+0

me puede dar un ejemplo del enfoque de espacio de nombres –

+0

Ahí va, es solo una manera de poner cosas en un objeto realmente –

+0

Facepalm. Sí, esta es una forma muy elegante de persistir objetos sin tener una larga lista de declaraciones globales. Helpe mucho. – eggmatters

2

La variable es disponibles desde dentro $(document).ready( ya que es un mundial, pero son probablemente ge undefined porque no hay ningún valor disponible para .siteRoot antes de que el documento esté listo. Intenta esto:

var siteRoot = "blahblah"; 
$(document).ready(function(){ 
     alert(siteRoot); 
}); 

Ahora, si esperas un valor que esté disponible para esa variable a nivel mundial y para uso inmediato en otras partes de la aplicación, tendrá que volver a trabajar su solución otras partes de tu aplicación también hacen uso de ella solo cuando el DOM está listo.

0

Sin embargo, se puede compartir por hacer algo como esto:

$(document).ready(function(){ 
    window.siteroot = $('.site-root').val(); 
}); 

Y a través de su aplicación se podría hacer referencia a ella a través de:

if (typeof(window.siteroot) !== "undefined") { 
    //do this 
} 

Usted también podría carga perezosa que:

window.get_siteRoot = function() { 
    if (typeof(window.siteroot) !== "undefined") 
     return window.siteroot; 

    var val = $('.site-root').val(); 
    window.siteroot = val; 
    return window.siteroot; 
} 

HTH.

+1

las últimas 3 líneas pueden ser 'return window.siteroot = $ ('. Site-root'). Val()' –

3

La mejor manera de hacerlo es básicamente crear una variable global vacía o crear un espacio de nombres para almacenar las variables. Luego en el documento. Simplemente agregue su $('.site-root').val() a esa variable.

var siteRoot = ''; 

$(document).ready(function(){  
     siteRoot = $('.site-root').val(); 
     alert(siteRoot); 
}); 

De esta manera se establece la variable siteRoot después de saber que existe .site-raíz y que se encuentra disponible a nivel mundial en toda la aplicación.

Cuestiones relacionadas