2012-06-06 27 views
28

誰でも私にこれを理解させる助けができますか?未知の型エラー:オブジェクト[オブジェクトオブジェクト]にメソッド '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の代わりにbindを使用する必要があります。onは、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

私は答えを受け入れるまで12分です。私は正しいとチェックします...素晴らしい作品! – dvLden

+0

@Christophユーザーはなぜ彼のコード( '.on()')が古いバージョンのjQueryで動作していないのかを尋ねていますので、この答えは大丈夫です – fcalderan

+0

しかし、bindは.onと同じ動作をしません。 .clickではなくopがおそらく使用されるのはなぜですか? .liveは代替です – Alex

1

on()を使用するには、jQueryバージョン1.7以降を使用する必要があります。 bind()は推奨されていません。

+0

なぜ人々がこれを捨てたのか分かりませんが、 – 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()

関連する問題