2011-11-06 14 views
8

¿Cómo puedo hacer eso?Match event.target con el objeto jQuery existente

event.target devuelve un objeto HTML,

y mi elemento es un objeto jQuery.

¿Hay una mejor manera de averiguar si event.target = my_jquery_object, además de comparar ID o clases?

quiero para asegurarse de que es el mismo objeto, no sólo un elemento con una clase similar ...

he intentado con $(event.target) !== the_element y falla

the_element se define en el comienzo como $('.something', $(this))


Lo que trato de hacer es cerrar una caja cuando el usuario hace clic fuera de ella, pero con la condición de que el clic no se hizo en el enlace que abrió la caja en primer lugar.

así que tengo esto:

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

}); 

Y quiero añadir otra condición que verifica que el clic no se hizo en el enlace que abrió la caja.

Esto funciona, pero no me gusta:

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

:)

Respuesta

9

Puede obtener el elemento DOM real de jQuery utilizando .get(0) o simplemente the_element[0]. Sin embargo, probablemente sería mejor consultar con jQuery.

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

Usando su ejemplo:?

$(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] debe desenvolver su objeto jQuery y devolver una 'normal 'Objeto DOM, puede compararlo con el objeto DOM devuelto por event.target.

-2

Tal vez me equivoque, pero parece que nadie entiende la pregunta ... también quiero saber como llegar JQUERY objeto sobre el que he usado función de escucha de EVENT.TARGET, pero no un nodo DOM para un objeto jquery !!)) Entonces ...No encontré con un muy práctico, pero la solución de trabajo:

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

y modificar el método de devolución de llamada del oyente para recibir 2 argumentos:

onInpFocus : function(e, inp) 

lugar de utilizar de forma sencilla como:

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

En realidad, encontré otra forma, mucho más práctica :) Solo necesita usar el data argumento:

Datos que se deben pasar al controlador en event.data cuando se desencadena un evento .

Ahora mi código es el siguiente:

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