2012-04-17 8 views
2

を機能させる$これを渡しますjQueryのは、私が持っているパラメータ

<img id="leftBubble" class="bubbles" src="left.png" /> 
<img id="rightBubble" class="bubbles" src="right.png" /> 

そしてホバーイベントをとても似:

$(".bubbles").each(function(){ 
    $(this).hover(function() { 
     pause($(this)); 
    }, function() { 
     play(4000, $(this)); 
    }); 
}); 

私の一時停止()関数は

function pause(pauseMe) { 
    if (pauseMe == $("#leftBubble")) { 
     clearTimeout(timer1);      //this is never reached 
    } else if (pauseMe == $("#rightBubble")) { 
     clearTimeout(timer2);      //nor this 
    } 
} 
を動作していないようです

ホバーイベントを一時停止機能のパラメータとして$ thisを渡すようにするにはどうすればよいですか?

+0

jqueryの平等は、最良の '' .is( "セレクター")で行われますhttp://stackoverflow.com/questions/2448291/how-to-check-for-dom-equality-with-jqueryを参照してください/ 2448362#2448362 –

+0

jqueryオブジェクトを比較してください:http://stackoverflow.com/questions/2436966/how-would-you-compare-jquery-objects – malletjo

答えて

4

$を呼び出すたびに、結果の内容が同じであっても、異なる結果セットオブジェクトが返されます。あなたがしなければならないチェックがある:JavaScriptで

if (pauseMe.is("#leftBubble")) { 
0

thisは新しい関数定義を入力するたびに再定義されます。 の外部thisにアクセスする場合は、その変数への参照を変数(私はselfを使用)変数に保存する必要があります。

$(".bubbles").each(function(){ 
    var self = this; 
    $(this).hover(function() { 
     pause($(self)); 
    }, function() { 
     play(4000, $(self)); 
    }); 
}); 

jQueryオブジェクト間の比較がうまくいくかどうかわかりません。たぶんあなたはDOM要素を比較することができます:pauseMe[0] == $("#leftBubble")[0]、または前述のようにID。

+1

この場合、外側の「this」と内側の「this」は同じ。 –

4

あなたが$(...)を呼び出すと、それはあなたが$(...)最後の時間を呼び出すときに、generetedたものと同じではないことを、新しいオブジェクトを生成し

$(".bubbles").each(function(){ 
    $(this).hover(function() { 
    pause(this.id); 
    }, function() { 
    play(4000, $(this)); 
    }); 
}); 
+0

これは最も理にかなっています。 '.is()'を使うことはここで過度のものと思われます。 –

+0

実際には、Idではなくパラメータとしてオブジェクト自体が必要です – jaredrada

0

function pause(pauseMe) { 
    if (pauseMe == "leftBubble") { 
     clearTimeout(timer1); 
    } else if (pauseMe == "rightBubble") { 
     clearTimeout(timer2); 
    } 
} 

と、呼び出し元に、以下のように試してみてください同じパラメータ。

とにかく、あなたは==とオブジェクトをjavascriptで比較することはできません。同じオブジェクトが好きな場合にのみtrueを返します。

a = {b:1} 
c = {b:1} 
d = c 

a == b // false 
d == c // true 
関連する問題