2012-06-06 8 views
28

아무도 알아낼 수 있습니까?잡히지 않은 TypeError : Object [object Object]에 'on'메서드가 없습니다.

jQuery의 최신 (또는 새 버전) 버전을 사용하면 아래의 작은 스크립트가 정상적으로 작동합니다. 그러나 이전 버전의 jQuery를 사용하면 스크립트에 on 함수가 존재하지 않는다고 나와 있습니다. 도움의 어떤 종류의 감사

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

:

다음은 jQuery를 이전 버전에서 작동하지 않습니다 내 스크립트입니다.

답변

75

on 대신 을 사용해야합니다. onjQuery 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

빠른 남자였습니다 ... 대답을 받아 들일 수있을 때까지 12 분. 내가 옳은지 확인해 보겠습니다 ... 잘 작동합니다! – dvLden

+0

@Christoph 사용자가 그의 코드 ('.on()')가 이전 버전의 jQuery와 작동하지 않는 이유를 묻습니다.이 대답은 괜찮습니다. – fcalderan

+0

그러나 bind는 .on과 같은 동작을하지 않습니다. op가 아마도 .click보다는 .on을 사용하는 이유일까요? .live는 대안입니다 – Alex

1

on()을 사용하려면 jQuery 버전 1.7 이상을 사용해야합니다. bind()은 더 이상 사용되지 않습니다.

+0

고마워요, 왜 사람들이 이것을 떨어 뜨렸는지는 알지만, 1.7을 놓았습니다. – Faizan

3

당신은 예를 들어, delegate()을 사용할 수

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

on()을 사용하여 작성된 다음 코드와 동일합니다 :

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

당신이 답안에서 설명하는 동등 함이 정확한 반면, 'delegate()'는 질문에서 OP의'on() '사용과 동등하지 않습니다. (그는 요소를 .theImage에 직접 첨부합니다. 다른 요소에 위임). – Matt

+0

FYI : jQuery 1.7에서'delegate()'가'on()'으로 대체되었습니다. – JSmyth

0

변경 on 기능 bind에 :

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

관련 문제