2013-02-26 20 views
7

Theo như tôi biết, phương pháp click() không hoạt động đối với tôi vì yếu tố tôi đang nhấp không tồn tại khi tải trang (DOM sẳn sàng).trên() so với hàm live() trên phần tử chưa tồn tại

Tôi đã tìm thấy nhiều câu trả lời gợi ý sử dụng .live('click',function(){...}). Điều này hoạt động tuyệt vời!

Tuy nhiên, .live() được khấu hao như jQuery 1,7

Vì vậy, tôi đã cố gắng sử dụng .on('click',function(){...}) thay vào đó, nhưng nó không không hoạt động (hoạt động giống như .click().

Có ai biết tại sao, hoặc những gì tôi có thể làm gì để sử dụng .on() tương tự như .live() (mà hoạt động)?

+0

@ wrschneider99 có thực sự! –

Trả lời

20

Kể từ on() thay thế cả hai bind()live(), bạn cần phải vượt qua một tham số thứ ba để tận dụng sự kiện Đoàn (nói cách khác, để làm cho nó hoạt động như cũ live()):

$('#container').on('click', '.element', function(){ }); 
+1

Cảm ơn, nếu '# container' là phần tử giống với' .element' thì sao? Tôi đã thử sử dụng cùng một yếu tố ở cả hai nơi, nhưng không có may mắn:/ –

+2

@iight Sau đó, nó sẽ không hoạt động. '# container' không thể được tạo động. Như j08691 đã nói, hãy chọn phần tử đóng gói gần với phần tử được thêm động nhất có thể để cải thiện hiệu suất. Tuy nhiên, – Johan

+0

phải là một phần tử cha mẹ, phải không? –

7

Bạn sẽ có thể sử dụng một định dạng như thế này:

$(document).on('click','element', function(){...}); 

đâu element là yếu tố bạn muốn để ràng buộc sự kiện nhấp chuột vào. Sử dụng document là loại trường hợp xấu nhất vì bạn lý tưởng muốn sử dụng phần tử tồn tại khi DOM được tải gần hơn trong phân cấp DOM cho phần tử sẽ được tải động.

Từ jQuery .on() tài liệu:

xử lý tổ chức sự kiện đang bị ràng buộc duy nhất với các yếu tố hiện đang được chọn; chúng phải tồn tại trên trang tại thời điểm mã của bạn thực hiện lệnh gọi tới .on(). Để đảm bảo các yếu tố có mặt và có thể được chọn, hãy thực hiện sự kiện ràng buộc bên trong trình xử lý sẵn sàng tài liệu cho các phần tử nằm trong đánh dấu HTML trên trang. Nếu HTML mới đang được đưa vào trang, hãy chọn các yếu tố và đính kèm trình xử lý sự kiện sau khi HTML mới được đặt vào trang.

+1

Cảm ơn! điều này làm việc, nhưng bây giờ tôi chỉ cần nghiên cứu toàn bộ ràng buộc $ (tài liệu). Điều này không khắc phục vấn đề mặc dù! –