2009-04-26 18 views
1

で$(この)コンテキストに役立つ必要があります。私は、このコードブロックでいくつかの助けが必要にjQuery

options.imgs.click(function() { 
      var allImgs = $("#big img"); 
      $("#big img").each(function(n) { 
       this.index = n; 
      }) 
      animateImage(allImgs); 
     }) 

    }; 

    function animateImage(images) { 
     for(var i = 0; i < images.length; i++) { 
      if (images[i].index == 0) { 
       alert($(this).index) 
      } 
     } 
    } 

私の問題は、次のとおりです。

$(this).effect('scale', { percent: 200 }, 1000) 

が機能していません。このステートメントでは、インデックスが0の画像を参照し、それを200%にスケールします。しかし、$(this)は、最初のイメージを全く参照していません。すぐにあなたの関数を呼び出すよう

+0

私はあなたの例で問題のコードを使用しているが表示されません。アニメーションを最初のimg –

+0

@Deviantに適用するには、$( "#big img:first")を使うことができます。 – strager

答えて

2

あなたの「この」変数が変更された:

function test() { 
    alert(this); // this will be the window object 
} 
$('p b').click(function() { 
    alert(this); // this will be the bold element object 
    test(); 
}); 

例えば、(放火犯を使用して)このページに対してこれを実行している、私は「尋ね」をクリックすると、 (太字で表示されています)このがウィンドウオブジェクトである場合、ではなく、のように太字の要素がそのまま表示されます。イベントハンドラ。

options.imgs.click(function() { 
      var allImgs = $("#big img"); 
      $("#big img").each(function(n) { 
        this.index = n; 
      }) 
      animateImage(allImgs, this); 
    }) 

}; 

function animateImage(images, img) { 
    for(var i = 0; i < images.length; i++) { 
      if (images[i].index == 0) { 
        alert($(img).index) 
      } 
    } 
} 
+0

ありがとうaltCognito –

0

Call function with “this”を参照してください。ちょうどあなたがスルー機能で働きたいオブジェクトを渡し、これを修正するには

あなたの

options.imgs.click(function() { 
    var allImgs = $("#big img"); 
    allImgs.each(function(n) { 
     this.index = n; 
    }); 

    allImgs.get(0).effect('scale', { percent: 200 }, 1000); 
}); 

基本的に

animateImage.call(this, allImgs); 

animateImage(allImgs); 

を交換することで何をしたいあなたは、このにあなたのコードをリファクタリングすることができます(または似たような)効果を開始することもできますeach引数の側には、n == 0があります。 (私は私の例ではこれをしませんでした。なぜなら、あなたが持っているコードとまったく同じではないからです(醜い並行性の問題は無視しています)。

0

クリックの呼び出しの中で、最初のパラメータ( "this")はクリックしたDOM要素です。あなたのDOM要素は "インデックス"プロパティを持っていますか?

「オブジェクトダンプ」機能(例:http://weblogs.asp.net/skillet/archive/2006/03/23/440940.aspx)を使用することをお勧めします。使い方は次のようになります。

$("a").click(function(){ 
    alert(object_dump(this)) 
}); 

(object_dump()関数は「)警告(」あなたがする必要があり、それを文字列を返すか、それで何かを行うことに注意してください)。

関連する問題