2011-11-06 8 views
8

どうすればいいですか?イベントとターゲットを既存のjQueryオブジェクトと一致させる

event.targetは、HTMLオブジェクトを返します

と私の要素は、jQueryオブジェクトです。

IDやクラスを比較するだけでなく、event.target = my_jquery_objectがあるかどうか調べる良い方法はありますか?

私はそれは同じオブジェクトではなく、類似したクラスでちょうど要素だことを確認するには...

私は$(event.target) !== the_elementと試み、それが

the_elementが$('.something', $(this))

として初めに定義されて失敗します

私がしようとしているのは、ユーザーがボックスの外側をクリックしたときにボックスを閉じることですが、最初にボックスを開いたリンク上でクリックが行われなかったという条件があります。

だから私は、この持っている:

$(document).click(function(event){ 
    if(($(event.target).parents().index(box) == -1) 
    && box.is(':visible')){ 
     close(); 
    } 

}); 

を私はクリックが箱を開けたリンク上で行われていなかったことを確認し、別の条件を追加します。

これは動作しますが、私はそれを好きではない:

if($(event.target).attr('id') != the_element)

:)

答えて

9

実際のDOM要素は、.get(0)または単にthe_element[0]を使用してjQueryから取得できます。しかし、おそらくjQueryで確認するほうがよいでしょう。あなたの例を使用して

if (the_element.is(event.target)) 
{ 
    ... 
} 

:?

$(document).click(function(event){ 
    if (the_element.is(event.target)) { 
     return false; 
    } 
    if(($(event.target).parents().index(box) == -1) 
    && box.is(':visible')){ 
     close(); 
    } 

}); 
5

TRY -

if(event.target === the_element[0]) 

the_element[0]あなたのjQueryオブジェクトのラップを解除して「通常を返す必要があります'DOMオブジェクトの場合は、event.targetによって返されたDOMオブジェクトと比較できます。

-2

たぶん私は間違っているんだけど、誰も質問を理解していないように見えます...私はまた私が使用した上でjQueryオブジェクトを取得する方法を知りたいですリスナー関数はEVENT.TARGETにありますが、jqueryオブジェクトのDOMノードではありません!!)) ...私は非常に便利ではない見つけましたが、作業溶液:

var elem = $('<input type="text" class="input" />'); 
elem.focus($.proxy(function(e) 
{ 
    this.onInpFocus(e, elem); 
}, this)); 

そして2つの引数受け取るリスナーのコールバックメソッド修正:

onInpFocus : function(e, inp) 

代わりのように簡単な方法を使用して:

elem.focus($.proxy(this.onInpFocus, this)); 
-2

を実際には、もっと便利な方法を見つけました:) データ引数:

イベントが がトリガーされたときに、event.dataのハンドラに渡されるデータ。

は今、私のコードは次のようになります。

var inp = $('<input type="text" />'); 
inp.focus({ j : inp } , $.proxy(this.onInpFocus, this)); 

//and the handler method 
onInpFocus : function(e) 
{ 
var inp = e.data.j; 
... 
} 
関連する問題