2012-06-06 15 views
28

Kann mir jemand helfen, das herauszufinden?Uncaught TypeError: Objekt [Objekt Objekt] hat keine Methode 'on'

Wenn ich die neueste (oder eine neuere) Version von jQuery verwende, funktioniert das kleine Skript unten gut. Wenn ich jedoch ältere Versionen von jQuery verwende, sagt mein Skript, dass die on Funktion nicht existiert.

Hier ist mein Skript, das nicht mit älteren Versionen von jQuery funktioniert:

$(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);   
    }) 
}) 

Jede Art von Hilfe ist willkommen.

Antwort

75

Sie müssen bind anstelle von on verwenden, da on nur in jQuery 1.7 eingeführt wurde.

$(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 das war schnell man ... 12 Minuten bis ich eine Antwort annehmen kann. Ich werde es als richtig prüfen ... funktioniert super! – dvLden

+0

@Christoph der Benutzer fragt, warum sein Code (mit '.on()') funktioniert nicht mit der älteren Version von jQuery ... so ist diese Antwort in Ordnung – fcalderan

+0

Aber Bind hat nicht das gleiche Verhalten wie .on, die Warum hat die Op vermutlich eher .on als .click benutzt? .Live ist die Alternative – Alex

1

Sie müssen verwenden jQuery-Version 1.7+ on() zu verwenden. bind() ist veraltet.

+0

Danke, weiß nicht, warum Leute dies abgelehnt, aber ich legte 1,7 und es hat funktioniert! – Faizan

3

könnten Sie delegate() verwenden, zum Beispiel:

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

Dies entspricht dem folgenden Code geschrieben mit on():

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

Während die Äquivalenzen, die Sie in Ihrer Antwort beschreiben, korrekt sind, ist 'delegate()' * nicht * äquivalent zur Verwendung von 'on()' in der Frage durch OP (er hängt das Element direkt an '.theImage' an, wobei Sie delegieren an ein anderes Element). – Matt

+0

FYI: ab jQuery 1.7 'delegate()' wurde ersetzt durch 'on()' – JSmyth

0

Ändern der on Funktion bind:

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

Verwandte Themen