2011-11-19 2 views
6

Tôi đã đọc tài liệu hướng dẫn jQuery về xử lý sự kiện, nhưng tôi vẫn không thể hiểu được mình nên làm gì.Trong jQuery, tôi có nên chọn live(), delegate() hoặc on() không?

Tôi có ứng dụng dành cho thiết bị di động nơi nội dung được tải bằng ajax, do đó, sự kiện không thể bị ràng buộc tại tài liệu onLoad cho nội dung đó.

Khi ứng dụng của tôi phát triển, bây giờ tôi bắt đầu lo ngại rằng việc xử lý sự kiện sai có thể gây ra vấn đề về hiệu suất.

Ý nghĩa về hiệu suất lựa chọn giữa on(), live() và delegate() là gì?

Điều gì đó khác cần xem xét?

Trả lời

6

Từ jQuery 1.7, viên chức (và performant nhất) cách để ràng buộc sự kiện là .on.off . Đó là nhanh nhất khi kết hợp với một selector id dựa trên:

$('#id').on('click', myHandler); 

.on supercedes .live.delegate.bind, xem tại đây để biết thêm:

http://blog.jquery.com/2011/11/03/jquery-1-7-released/

1

Tính đến jQuery 1,7 jQuery đội/API khuyên:

[các] .live() phương pháp bị phản đối. Sử dụng .on() để đính kèm trình xử lý sự kiện. Người dùng các phiên bản cũ hơn của jQuery nên sử dụng .delegate() trong tùy chọn .live().

tham khảo: live() API reference, at: http://api.jquery.com/live/

Vì vậy, sự lựa chọn, bài jQuery 1.7, là giữa on()delegate(); và đề xuất ở trên, dường như đề xuất bạn nên sử dụng .on() tuỳ chọn delegate(). Mặc dù tôi không thể tranh luận là lý do tại sao đó là.

+0

Vì vậy, bạn không thấy bất kỳ sự khác biệt giữa trên() và ủy quyền, ngoại trừ việc() được giới thiệu? –

+1

Thành thật mà nói, không; ngoại trừ việc nó * cảm thấy * như thể họ đang dọn dẹp jQuery một chút, và ý tưởng '.on()' và '.off()' có vẻ ngụ ý rằng '.delegate()', vì nó dường như làm được nhiều cũng giống như '.on()', có thể sẽ không còn được dùng nữa trong tương lai. –

1

Trong trường hợp bạn đang tạo một ứng dụng javascript cho chính mình hoặc cho sản phẩm của riêng bạn, bạn nên sử dụng jQuery 1.7 và .on() phương pháp.

Trong trường hợp bạn đang làm một số loại plugin, mà có thể được sử dụng trên các phiên bản cũ, tôi sẽ sử dụng .delegate()