2012-08-28 40 views
31

Tôi tự động tạo div mới (với lớp và ID "hộp văn bản") và một số phần tử khác bên trong nó và sau này trong mã của tôi, tôi ràng buộc div cho sự kiện nhấp chuột và hiển thị phần tử được nhấp, như vậy:jquery e.target.hasClass không hoạt động

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

Điều này là tốt và nó sẽ cung cấp cho tôi textbox là một trong các lớp được hiển thị. Nhưng event.target.hasClass() dường như không hoạt động. Vì vậy, khi tôi làm như sau, không có gì xảy ra:

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

Tôi đã thử một vài cách khác nhau và dường như tôi không hoạt động. Có cách nào khác để đối phó với các sự kiện hay tôi đang làm điều gì sai?

Trả lời

69

Bạn đang cố gắng sử dụng phương pháp jQuery, hasClass(), trên một phần tử DOM chuẩn. Bạn cần phải chuyển đổi các đồng bằng JS DOM yếu tố e.target đến một đối tượng jQuery, như vậy:

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

Và bạn kết thúc với:

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

Thông báo việc sử dụng các on(), đóng cửa đúng đắn của click và bạn không cần dấu ngoặc nhọn trong câu lệnh if nếu bạn chỉ thực hiện một cảnh báo đơn giản.

+0

Wow! không sao đâu! Có lẽ đây là một chủ đề nhỏ, nhưng sự khác biệt giữa $ (event.target) và event.target là gì? Các công trình trước đây với hasClass, nhưng không phải khi tôi cố gắng cảnh báo .className. – user961627

+5

hasClass là một hàm jQuery, .className là plain javascript – anderssonola

+2

Cái đầu tiên được bọc trong jQuery, do đó, nó là một đối tượng jQuery và có thể được sử dụng với các phương thức jQuery. Thứ hai là một đối tượng javascript đơn giản được trả về trong hàm 'event' và có thể được sử dụng với các phương thức javascript đơn giản chứ không phải các phương thức jQuery. – adeneo

6

Nếu bạn muốn tiếp tục sử dụng yếu tố JS DOM của bạn đơn giản mà không cần sử dụng jQuery:

event.target.classList.contains('textbox') 
Các vấn đề liên quan