2010-03-11 16 views
5

Tengo una pregunta interesante aquí que puede sonar bastante tonta, pero aquí va. Utilizando la función de lista de jQuery que he definido algunas funciones de este modo:

$(function(){ 

    var function1 = function(data){ 
    //do something 
    } 

    var function2 = function(data){ 
    //do something else 
    } 
}); 

Por alguna razón, con el fin de IE para hacer lo que estoy usando correctamente, hay que hacerlo en el $ (document) ready función() . Sin embargo, necesito activar estas funciones una vez que tengo un conjunto de datos del lado del servidor. Así que pensé que iba a hacer algo como esto ...

Object.Namespace.callFunction = function(data){ 
function1(data); 
} 

... para ser colocado fuera de la función lista en una secuencia de comandos para que pudiera llamar directamente.

Lamentablemente, sé que esto no funciona porque bueno, ¡no parece lógico y lo he intentado !. Hice todas estas funciones arbitrarias porque no importa el contenido, sino el concepto. También intenté usar manejadores de eventos para activar la función una vez que obtuve esa información, ¡en vano! ¿Cuál es la mejor manera de hacer funciones dentro del $ (document) .ready() global?

+2

No soy un experto en JQuery, pero ¿por qué no estás definiendo las funciones como globales en primer lugar usando los bloques 'function function1 (data) {...}' de la vieja escuela? –

+2

Como ya han dicho otros, la respuesta es simplemente definir las funciones como funciones. ¿Por qué esto no funciona en IE? *Esa es la pregunta. – harpo

+0

esos fueron solo ejemplos básicos. También estoy trabajando con el complemento ExtJS Slider y, por alguna razón, IE no los renderizará correctamente a menos que se realicen dentro de doc.ready(). – sctskw

Respuesta

6

Si (por razones estilísticas) desea escribir la función en línea con su $ (document) ready, puede hacerlo de esta manera:

var app={}; /*Use whatever your apps name is, abbreviated (something short)*/ 
$(function() 
{ 
    app.function1 = function(data) { }; 
    app.function2 = function(data) { }; 
    // now you can call all functions inside and outside this ready function with the app. prefix 
    // if you also want a local reference to the function without the app. prefix, you can do: 
    var function1 = app.function1 = function(data) { }; 
}); 
+0

o window.functionName (window.app.functionName también funcionará) –

6

Si está definiendo funciones globales, no hay ninguna razón para tenerlas en el documento listo. Lo único que debe ir en el documento listo son las cosas que necesitan espere hasta que el documento esté listo para poder actuar. La función de definición puede suceder antes de que el documento esté listo.

// Defining the functions in the global scope. 
var function1 = function(data){ 
    //do something that requires the dom to be ready. 
} 

var function2 = function(data){ 
    //do something else that requires the dom to be ready. 
} 
$(function() { 
    // Running the functions when the document is ready. 
    function1(); 
    function2(); 
}); 
+0

No podría estar más de acuerdo ... pero desafortunadamente para poder renderizar todo apropiadamente en la página, necesito esperar hasta que esté listo. En este caso ... No puedo llamar directamente a la función que necesito poder hacer. – sctskw

+1

@ user291928 luego defina las funciones fuera del documento listo y llámelas cuando el documento esté. – PetersenDidIt

3

¿qué pasa con

function function1(data){ 
    //do something 
    } 
    function function2(data){ 
    //do something else 
    } 

    $(function(){ 
     // if you need to call inside ready 
     function1(); 
     function2(); 
    }); 
+0

Gracias ... No estaba pensando en envolver mi llamada de función en la función lista. Simplemente parece extraño hacer desde donde está el código, pero esto funciona bien. gracias de nuevo. – sctskw

+0

Esta es la manera de hacerlo. En realidad, generalmente utilizo un solo objeto global con esas funciones como propiedades para evitar contaminar el espacio de nombres global, pero la misma idea. – Plynx

+0

@Plynx, estoy de acuerdo contigo, esta fue una gran prisa, pero esa es la idea principal, ¡buena respuesta! –

Cuestiones relacionadas