2011-12-17 10 views
7

Recientemente aprendí, el truco muy útil, que le permite pasar $ en la función jQuery para que todo el código contenido esté en un No Modo Conflicto La ventaja es que puede escribir todo el código contenido con '$' en lugar de 'jQuery'.Llamar a jQuery en (ventana). Cargar y pasar la variable para el código 'No Conflict'

Este código funciona bien ...

jQuery(document).ready(function($) { 
// My code 
}); 

Este código no funciona ...

jQuery(window).load(function($){ 
// My code 
}); 

Dice '$ no es una función'. ¿Cómo puedo hacer que funcione?

Respuesta

15

Crear una función de auto-invocación (anónimo), y pasar el objeto jQuery como se muestra a continuación:

(function($){ //This functions first parameter is named $ 
    $(window).load(function(){ 
     // Your code 
    }); 
})(jQuery); //Passing the jQuery object as a first argument 
+0

Por qué es esto necesario? ¿Y debería usarlo siempre, incluso cuando utiliza document.ready en modo no conflictivo? – jjeaton

+3

@jjeaton Al utilizar un cierre como se muestra arriba, está 100% seguro de que '$' dentro de esa función siempre se refiere al objeto jQuery en ese momento (de lo contrario, '$' podría sobrescribirse en un momento posterior, causando un error impredecible) El problema real en la pregunta es que el OP supone que '$' en '.load (función ($) ...)' es un objeto jQuery (que no es - vea la documentación de ['.load()']() http://api.jquery.com/load/). El primer ejemplo funciona, porque en realidad es una característica documentada de '.ready', lea de nuevo la documentación: http://api.jquery.com/ready/ –

+0

¡gracias eso tiene sentido! – jjeaton

Cuestiones relacionadas