2012-08-28 26 views
31

Creo dinámicamente un nuevo div (con una clase e ID de "cuadro de texto"), y algunos otros elementos dentro de él, y más tarde en mi código, vinculo ese div al evento click y mostrar el elemento hace clic, así:jquery e.target.hasClass no funciona

$('#textbox_'+i).bind('click', function(event){ 
    alert(event.target.className); 
} 

Esto está muy bien, y me dará textbox como una de las clases mostradas. Pero event.target.hasClass() parece que no funciona. Así que, cuando hago lo siguiente, no pasa nada:

$('#textbox_'+i).bind('click', function(event){ 
    if(event.target.hasClass('textbox')) { alert('got it!'); } 
} 

lo probé un par de maneras diferentes y me parece que event.target.hasClass() simplemente no funciona. ¿Hay alguna otra forma de lidiar con los eventos o estoy haciendo algo mal?

Respuesta

69

Está tratando de usar un método jQuery, hasClass(), en un elemento DOM estándar. Es necesario para convertir el elemento JS DOM llanura e.target a un objeto jQuery, así:

$(event.target).hasClass('textbox') 

Y se termina con:

$('#textbox_'+i).on('click', function(event){ 
    if($(event.target).hasClass('textbox')) alert('got it!'); 
}); 

Aviso el uso de on(), el cierre correcto de la click función, y no necesita corchetes en su declaración if si solo está ejecutando una alerta simple.

+0

Wow! bien, eso fue simple! Quizás esto es un poco fuera de tema, pero ¿cuál es la diferencia entre $ (event.target) y event.target? El primero funciona con hasClass, pero no cuando intento alertar a .className. – user961627

+5

hasClass es una función jQuery, .className es simple javascript – anderssonola

+2

El primero está envuelto en jQuery, por lo que es un objeto jQuery y se puede utilizar con métodos jQuery. El segundo es un objeto javascript simple devuelto en las funciones 'event' y se puede usar con métodos simples de javascript pero no con jQuery. – adeneo

6

Si desea seguir usando el elemento de JS DOM plano sin el uso de jQuery:

event.target.classList.contains('textbox')