2012-08-28 5 views
31

Ich erstelle dynamisch eine neue div (mit einer "Textbox" -Klasse und ID) und einige andere Elemente darin, und später in meinem Code binde ich das div an das Click-Ereignis und zeigen das Element angeklickt, etwa so:jquery e.target.hasClass funktioniert nicht

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

das ist in Ordnung, und es wird mir textbox als einer der Klassen angezeigt geben. Aber event.target.hasClass() scheint nicht zu funktionieren. Also, wenn ich folgendes tun, passiert nichts:

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

Ich versuchte es ein paar verschiedene Möglichkeiten, und es scheint mir, dass event.target.hasClass() einfach nicht funktioniert. Gibt es eine andere Möglichkeit, mit Ereignissen umzugehen oder mache ich etwas falsch?

Antwort

69

Sie versuchen, eine jQuery-Methode hasClass() auf einem Standard-DOM-Element zu verwenden. Sie müssen die Ebene JS DOM-Element e.target auf ein jQuery-Objekt konvertieren, etwa so:

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

Und Sie am Ende mit:

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

Beachten Sie die Verwendung von on(), die ordnungsgemäße Schließen der click Funktion, und Sie brauchen keine geschweiften Klammern in Ihrer if-Anweisung, wenn Sie nur eine einfache Warnung ausführen.

+0

Wow! Okay, das war einfach! Vielleicht ist das ein wenig off topic, aber was ist der Unterschied zwischen $ (event.target) und event.target? Ersteres funktioniert mit hasClass, aber nicht, wenn ich versuche, .className zu alarmieren. – user961627

+5

hasClass ist eine jQuery-Funktion, .ClassName ist plain Javascript – anderssonola

+2

Die erste ist in jQuery verpackt, also ist es ein jQuery-Objekt und kann mit jQuery-Methoden verwendet werden. Die zweite ist ein einfaches JavaScript-Objekt, das in den Funktionen 'event' zurückgegeben wird und mit einfachen JavaScript-Methoden, aber nicht mit jQuery-Methoden verwendet werden kann. – adeneo

6

Wenn Sie Ihr JS DOM-Element Ebene ohne Verwendung jQuery zu halten mit:

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