2011-11-06 37 views
8

我該怎麼做?將event.target與現有的jQuery對象匹配

event.target返回一個HTML對象,

和我的元素是一個jQuery對象。

有沒有更好的方法來找出event.target = my_jquery_object,除了比較ID或類?

我想確保它是相同的對象,而不是隻是一個類似的類元素...

我試着用$(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

您可以使用.get(0)或簡單地the_element[0]從jQuery中獲取實際的DOM元素。不過,使用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

嘗試 -

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; 
... 
}