2012-06-06 10 views
28

¿Alguien me puede ayudar a resolver esto?TypeError no capturado: El objeto [objeto Object] no tiene el método 'on'

Cuando uso la versión más reciente (o nueva) de jQuery, el pequeño script a continuación funciona bien. Sin embargo, cuando uso versiones anteriores de jQuery, mi script dice que la función on no existe.

Aquí está mi script que no funciona con versiones anteriores de jQuery:

$(document).ready(function() { 
    $(".theImage").on("click", function(){ 
     // In the event clicked, find image, fade slowly to .01 opacity 
     $(this).find("img").fadeTo("slow", .01).end() 
     // Then, of siblings, find all images and fade slowly to 100% opacity 
       .siblings().find("img").fadeTo("slow", 1);   
    }) 
}) 

se aprecia ningún tipo de ayuda.

Respuesta

75

Debe utilizar bind en lugar de on, ya que on solo se introdujo en jQuery 1.7.

$(document).ready(function() { 
    $(".theImage").bind("click", function(){ 
     // In the event clicked, find image, fade slowly to .01 opacity 
     $(this).find("img").fadeTo("slow", .01).end() 
     // Then, of siblings, find all images and fade slowly to 100% opacity 
     .siblings().find("img").fadeTo("slow", 1);   
    }) 
}) 
+1

Woah fue rápido ... 12 minutos hasta que pueda aceptar una respuesta. Lo comprobaré como correcto ... ¡funciona genial! – dvLden

+0

@Christoph el usuario pregunta por qué su código (con '.on()') no funciona con la versión anterior de jQuery ... por lo que esta respuesta es correcta – fcalderan

+0

Pero bind no tiene el mismo comportamiento que .on, que ¿Por qué el op presumiblemente usa .on en lugar de. clic? .live es la alternativa – Alex

1

Debe utilizar jQuery versión 1.7+ de usar on(). bind() está en desuso.

+0

Gracias, no sé por qué la gente rechazó esto pero coloqué 1.7 y funcionó! – Faizan

3

usted podría utilizar delegate(), por ejemplo:

$("table").delegate("td", "click", function() { 
    $(this).toggleClass("chosen"); 
}); 

Esto es equivalente al siguiente código escrito usando on():

$("table").on("click", "td", function() { 
    $(this).toggleClass("chosen"); 
}); 
+0

Si bien las equivalencias que describes en tu respuesta son correctas, 'delegate()' es * no * equivalente al uso de OP de 'on() 'en la pregunta (él adjunta el elemento directamente a' .theImage', donde delegas a otro elemento). – Matt

+0

FYI: a partir de jQuery 1.7 'delegate()' ha sido reemplazado por 'on()' – JSmyth

0

Cambiar el on función para bind:

.children().on("click",function()
a
.children().bind("click",function()

Cuestiones relacionadas