2011-06-07 5 views
18

Cuando intento usar $("#div_id") en $(document).ready, devuelve NULL, pero cuando uso jQuery("#div_id"), ¡devuelve el objeto real!

¿Por qué está sucediendo eso?

ACTUALIZACIÓN: He intentado el método NoConflict sin obtener ninguna pista.

jQuery.noConflict() 
function (a,b){return new c.fn.init(a,b)} 

$.noConflict(); 
TypeError: Object function() 
    { 
     return document.getElementById.apply(document, arguments) 
    } has no method 'noConflict' 

ACTUALIZACIÓN 2:

$(document).ready(function() { 
    debugger; 
}); 

<input type="text" id="test" name="test" value="123" /> 

Cuando ejecuto el código siguiente en la consola me dieron estos resultados:

$("#test").val() 
TypeError: Cannot call method 'val' of null 
jQuery("#test").val() 
"123" 

Gracias

+1

Suena como Firebug es anulación '' $ a document.getElementById – Raynos

+0

I cargar la página sin habilitar Firebug, a veces indica un error que indica que no se encontró el elemento.Pero otras veces funciona bien – wael34218

Respuesta

16

Ver jQuery.noConflict(). ¿Podrían otras bibliotecas de JavaScript en su página usar la variable $?

$ es solo una variable que se utiliza para alias jQuery y al ser una variable, se le puede asignar cualquier cosa.

+0

¿Cuándo se alias exactamente? ? Intenté 'jQuery (" # checkbox1 ")' y '# (" # checkbox1 ")' en una nueva página html sin complementos, la primera funcionó como un amuleto y la otra devolvió NULL. Usé jQuery 1.5.2 para esa prueba – wael34218

+0

@ wael34218 hmm ... curioso, necesitaría ver un código de muestra antes de poder adivinar qué está pasando. ¿Puedes publicar una página simple que reproduzca este error? – Graham

+0

He actualizado la publicación de nuevo, por favor compruébalo. Si pongo alertas para mostrar el valor de $ ("# test")/jQuery ("# ​​test") en lugar de depuración, a veces funciona a veces no – wael34218

2

Tal vez usted tiene otra biblioteca que utiliza ps

+1

Si echa un vistazo a la documentación de noConflict jQuery, http://api.jquery.com/jQuery.noConflict/ –

+0

No estoy utilizando ninguna biblioteca que pueda anularla – wael34218

5

$ también se utiliza en Prototype.js, que es un marco de JavaScript como jQuery. Podría ser el caso de que su proyecto también incluya referencias a este marco.

Para obtener más información sobre cómo funciona el prototipo de dólares, vaya al here.

Puede hacer que los dos funcionen junto con la sentencia noConflict, como se indica en las otras respuestas. Estamos haciendo esto en uno de nuestros proyectos, que usa $ (elemento) para el código del prototipo heredado y jQuery (elemento) para el nuevo código jQuery.

+1

No estoy usando ningún prototipo, y no estoy planeando hacerlo. La idea es que solo estoy usando jQuery y jQuery! = $ ... eso me confunde – wael34218

+0

Pudo haber estado trabajando en un prototipo aplicación heredada, con referencias más antiguas a otros marcos js. Si ese no es el caso, ignore esta respuesta =) – koenmetsu

+0

Estaba trabajando en un código muy antiguo que está siendo desarrollado por los antiguos griegos cuando lo descubrí. Pero cuando lo probé en un nuevo archivo html que solo incluye jquery 1.5.2, surgió el mismo problema. – wael34218

9

$ y jQuery ambos son iguales, excepto $ es sólo un alias de jQuery que se puede cambiar o quitar con jQuery.noConflict modo.

+0

¿Cuándo se alias exactamente? Intenté jQuery ("# ​​checkbox1") y # ("# checkbox1") en una nueva página html sin complementos, la primera funcionó como un amuleto y la otra devolvió NULL. Usé jQuery 1.5.2 para esa prueba – wael34218

+0

Probé '$ (" # checkbox1 ")' en vez de '# (" # checkbox1 ")' – sanmai

+0

lol, fue un error tipográfico en mi comentario, es '$ (" # checkbox1 ")' en mi código – wael34218

3

Parece que algo ha tomado el $, reasignar jQuery para $, trate de ir:

var $ = jQuery; 
+0

No hay código que anule el signo de dólar – wael34218

1

jQuery y $ son los mismos - ver jQuery código fuente:

window.jQuery = window.$ = jQuery; 

Tal vez use otra biblioteca que use la variable $ y luego tendrá que resolver el conflicto de nombres.

<script type="text/javascript"> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
    }); 
    // Code that uses other library's $ can follow here. 
</script> 

o puede utilizar uno de los siguientes fragmento (en la que el cuerpo no habrá ningún conflicto de $):

// Method 1 
jQuery(document).ready(function($){ 
    /* some code that uses jQuery $ */ 
}); 

// Method 2 
(function($) { 
    /* some code that uses jQuery $ */ 
})(jQuery); 
+0

Solo estoy usando jQuery sin otras bibliotecas. Pruébelo, cree una página html simple que requiera jQuery y verá la diferencia entre $ y jQuery. – wael34218

Cuestiones relacionadas