2011-07-10 11 views
1

私はこのように2つの画像を呼び出す関数を持っています。関数内のJquery/Javascriptターゲット

$('#image1').bind('click',doNext); 
$('#image2').bind('click',doNext); 

どの機能が呼び出されたかを知る必要があります。 doNext

function doNext(){ 
if(target == $('#image1'){ 
    alert('image1'); 
    }else{ 
    alert('image2'); 
    } 
} 

答えて

2

thisので、生のDOM要素になります。

あり
function doNext() { 
    if (this.id === "image1") { 
     alert('image1'); 
    }else{ 
     alert('image2'); 
    } 
} 

あなたが特にあなたのコードでそれをしたので、私はidに分岐するんだけど、通常はあなただけとの対話オブジェクト。

jQuery関数を使用する必要がある場合は、生のDOM要素をjQueryオブジェクト(var $this = $(this);)にラップしますが、上記のようにしてidを参照する必要はありません。あなたがイベント(this)に夢中れている要素、およびイベント(event.target)をトリガーしていることの要素:jQueryのイベントハンドラ内

、あなたはへのアクセス権を持っている二つの重要なDOM要素(少なくとも)があります。あなたのケースでimgは、他の要素を含めることはできませんので、image1image2img要素であると仮定し、それらが同じになるだろうが、他の要素(divpを含めることができる要素の場合など  —例えば、ほとんどの要素)、event.targetthisと異なる場合があります。あなたは、段落をクリックすると、あなたがdivにイベントを夢中ので、あなたが...

DIV 
P

を得るでしょう

<div id="foo"> 
    <p>Blah blah blah</p> 
</div> 

この

$("#foo").click(function(event) { 
    alert(this.tagName); 
    alert(event.target.tagName); 
}); 

、しかし:あなたが持っていると言いますそれはpのクリックによってトリガーされました。 (これはイベント委任の基礎です)

+1

偉大な説明のおかげ!これは治療になりました。 – james

0

attr()関数を使用して、要素のIDを取得します。あなたがこれを行うことができるようにまた、私はさらに両方の画像に共通するクラスを追加することで、これを単純化する:

$('.myimages').click(function() { 
    if($(this).attr() == 'image1') { 
     alert('image1'); 
    } 
    else { 
     alert('image2'); 
    } 
}); 
+0

'attr'を使って' id'を取り出すことは、大急ぎです。 'id'はDOMインスタンスの反映されたプロパティです。 –

+0

私はそれがうまく動作すると思う。効率的です。 – Kon

+0

それは非効率です(*問題は起こりそうもありませんが、非効率です)。あなたがやっていることが 'id'を探しているなら、jQueryインスタンスのDOM要素をラップし、それに' attr'を呼び出すことに関わる長い関数呼び出しとメモリ割り当ての理由はありません。最終的にそれを実現する前に他の4つの関数を使うことができます...生の要素の 'id'プロパティを見てください。 –

0

あなたはevent.targetを使用することができます。

function doNext(event){ 
if($(event.target).attr('id') == 'image1'){ 
    alert('image1'); 
    }else{ 
    alert('image2'); 
    } 
} 
+0

'event.target'はイベントが* hooked *された要素とは大きく異なります。この特定のケースでは、それらは 'img'要素なので、それは問題ありませんが、他の要素であれば、間違った要素(その中のスパンなど)を見てしまうでしょう。 –

+1

これを指摘してくれてありがとう、私は通常event.targetを使用しましたが、今私はこれを使うべきであると分かりました。 –

+0

助けてくれてありがとう。 – james

0

あなたがでevent.targetを得ることができますイベントハンドラ関数:

function doNext(event) { 
    var target = event.target; 
} 

また、thisがクリックされた要素を参照します:

function doNext() { 
    var clickedID = this.id; 
} 
+0

助けてくれてありがとう。 – james

1
var id = $(this).attr('id'); 
if (id == 'image1') { 
    alert('image1'); 
} else{ 
    alert('image2'); 
} 
+0

助けてくれてありがとう。 – james

0
$(document).ready(function() { 

$('#image1').click(function(){doNext('image1')}); 
$('#image2').click(function(){doNext('image2')}); 
}); 

doNext = function (target){ 
if(target == "image1"){ 
    alert('image1'); 
    }else{ 
    alert('image2'); 
    } 
} 
+0

助けてくれてありがとう。 – james

関連する問題