2011-11-06 12 views
8

Come posso farlo?Match event.target con oggetto jQuery esistente

event.target restituisce un oggetto HTML,

e il mio elemento è un oggetto jQuery.

C'è un modo migliore per scoprire se event.target = my_jquery_object, oltre a confrontare ID o classi?

voglio fare in modo che sia lo stesso oggetto, non solo un elemento con una classe simile ...

ho provato con $(event.target) !== the_element e viene a mancare

the_element è definita agli inizi come $('.something', $(this))


Quello che sto cercando di fare è chiudere una scatola quando l'utente fa clic al di fuori di essa, ma con la condizione che il clic non sia stato fatto sul link che ha aperto la scatola in primo luogo.

Così ho questo:

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

}); 

E voglio aggiungere un'altra condizione che verifica che il clic non è stato fatto il collegamento che ha aperto la scatola.

Questo funziona, ma non mi piace:

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

:)

risposta

9

È possibile ottenere l'elemento DOM effettivo da jQuery utilizzando .get(0) o semplicemente the_element[0]. Probabilmente sarebbe meglio controllare con jQuery, però.

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

Usando il tuo esempio:?

$(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] dovrebbe scartare l'oggetto jQuery e restituire un 'normale 'Oggetto DOM, è quindi possibile confrontarlo con l'oggetto DOM restituito da event.target.

-2

Forse mi sbaglio, ma sembra che nessuno capiva la domanda ... Voglio anche sapere come ottenere jQuery oggetto su cui ho usato funzione listener da EVENT.TARGET, ma non un nodo DOM per un oggetto jquery !!)) Quindi ...Io non ho trovato molto utile, ma soluzione di lavoro:

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

e modificato il metodo di callback di chi ascolta per ricevere 2 argomenti:

onInpFocus : function(e, inp) 

invece di utilizzare modo semplice come:

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

In realtà, ho trovato un altro modo, molto più pratico uno :) Basta usare l'argomento :

Dati da trasmettere al gestore in event.data quando un evento è attivato .

Ora il mio codice simile a questo:

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