2012-08-28 12 views
31

Dynamicznie tworzę nowy div (z klasą i identyfikatorem "textbox"), a także kilka innych elementów w nim, a później w moim kodzie wiążę to div ze zdarzeniem kliknięcia i wyświetlić element kliknięciu tak:jquery e.target.hasClass nie działa

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

to jest w porządku, a to będzie mi dać textbox jako jednej z klas wyświetlanych. Ale wydaje się, że event.target.hasClass() nie działa. Tak więc, kiedy należy wykonać następujące czynności, nic się nie dzieje:

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

Próbowałem kilka różnych sposobów i wydaje mi się, że event.target.hasClass() po prostu nie działa. Czy istnieje inny sposób radzenia sobie z wydarzeniami lub czy robię coś złego?

Odpowiedz

69

Próbujesz użyć metody jQuery, hasClass(), na standardowym elemencie DOM. Trzeba konwertować zwykły JS DOM elementu e.target do obiektu jQuery, tak:

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

I skończyć z:

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

Zauważ użycie on(), prawidłowego zamknięcia click i nie potrzebujesz nawiasów klamrowych w instrukcji if, jeśli wykonujesz tylko prosty alert.

+0

Wow! ok, to było proste! Może to trochę nie na temat, ale jaka jest różnica między $ (event.target) a event.target? Ten pierwszy działa z hasClass, ale nie kiedy próbuję ostrzec .className. – user961627

+5

hasClass jest funkcją jQuery, .className jest prostym javascript – anderssonola

+2

Pierwsza jest zawijana w jQuery, więc jest to obiekt jQuery i może być używany z metodami jQuery. Drugi to zwykły obiekt javascript zwrócony w funkcji 'zdarzenie' i może być używany z prostymi metodami javascript, ale nie z metodami jQuery. – adeneo

6

Jeśli chcesz zachować używając elementu JS DOM zwykły bez użycia jQuery:

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