2010-12-14 51 views
12

Tôi đã tạo một số liên kết html với jQuery và nối nó vào một số div nhưng nó không thể gọi phương thức nhấp bây giờ, khi các phần tử này được thêm vào (nó hoạt động tốt khi chúng được mã hóa thành html) $('#something a').click(function() ...jQuery nhấp chuột vào các thành phần được thêm vào

Có ai biết giải pháp cho việc này không?

Trả lời

21

Sử dụng .delegate() cho những trường hợp này:

$('#something').delegate('a', 'click', function() { 

này gắn một handler click trên #something, chứ không phải hướng đến <a> yếu tố bên trong ... do đó, nó hoạt động trên neo nối sau đó. Giải pháp thay thế (tồi tệ hơn cho một vài lý do) phiên bản là .live() như thế này:

$('#something a').live('click', function() { 
+0

@Nick - tại sao lại sử dụng trực tiếp tồi tệ hơn? Chỉ tò mò vì tôi sử dụng nó rất nhiều. – Josh

+0

@Nick - bạn có thể vui lòng nhận xét về lý do tại sao .live() tệ hơn không - tôi thực sự quan tâm. Chúc mừng! –

+4

@Josh, @Jakub - Với '.live()', hãy lấy đoạn mã ở trên - bộ chọn '$ ('# something a')' được chạy ngay lập tức, nhưng chúng ta không quan tâm những gì nó tìm thấy ... kết quả là lãng phí. Cũng vì nó gắn vào 'document', * mọi *' click' phải được kiểm tra với bộ chọn đó. Với '.delegate()', chỉ có bộ chọn '$ ('# something')' rất nhanh sẽ chạy, và chúng ta sử dụng kết quả. Ngoài ra, chỉ cần nhấp chuột từ bên trong '# something', vì chúng được kiểm tra ở bố mẹ đó, vì vậy các địa chỉ' .delegate() 'có 2 lý do hiệu suất ... với một bộ chọn đắt tiền hơn, lợi ích thậm chí còn lớn hơn. –

0

bạn cần phải sử dụng các chức năng sống để đảm bảo rằng sự kiện click được binded đến các yếu tố đã được thêm vào DOM sau khi trang đã được tải:

$('#something a').live('click',function() ..... 
+0

hoạt động tốt, cảm ơn bạn1 – Dejan

4

gì cũng làm việc là thêm [click] sự kiện khi gắn thêm các yếu tố, như vậy:

$('<someElement>').click(function(){ 
    $('<someElement>').append('<htmlCodeToAppend>'); 
    $('<appendedElement>').click(function() { /* do something */ }); 
}); 

cách tiếp cận này không được công việc, nhưng tôi không chắc chắn tôi f có bất kỳ cảnh báo nào cho nó - có thể một trong những chuyên gia có thể bước vào đây.

Chúc mừng, Erik

Các vấn đề liên quan