2011-12-09 30 views
5

Giả sử tôi chỉ muốn đính kèm một handler nhấp chuột đơn giản để một phần tử, tôi đã luôn luôn làm điều này:Tôi có nên sử dụng .on() hoặc .click() để đính kèm trình xử lý sự kiện không?

$("#mydiv").click(function() { ... }); 

Nhìn vào các tài liệu JQuery, có vẻ như .on() là "đề nghị" cách để đính kèm xử lý sự kiện và thay thế .bind(), .delegate().live():

Tính đến jQuery 1.7, phương pháp .Trên() cung cấp tất cả các chức năng cần thiết để gắn xử lý sự kiện. Để được trợ giúp khi chuyển đổi từ các phương thức sự kiện jQuery cũ hơn, hãy xem .bind(), .delegate() và .live().

Và trong tài liệu cho .click() nó nói:

Phương pháp này là một phím tắt cho .bind (nghe tiếng 'click', handler) trong hai biến thể đầu tiên, và .trigger ('nhấp chuột ') Trong lần thứ ba.

Vì vậy, đây ngụ ý rằng .click() đang sử dụng .bind() sẽ được chấp nhận và thay thế bằng .on(), phải không? Hoặc là ngụ ý rằng .click() sẽ dính xung quanh, nhưng nó sẽ ở một số điểm trở thành một phím tắt cho .on("click")?

Về cơ bản, câu hỏi của tôi là thế này ... Khi viết mã JQuery ngày hôm nay, tôi nên sử dụng:

Variant 1: $("#mydiv").click(function() { ... }); 

hay:

Variant 2: $("#mydiv").on("click", function() { ... }); 

?

+0

Bạn không phải lo lắng về mã cũ, rất có khả năng chúng sẽ không xóa hoàn toàn ký hiệu nhấp chuột. Trình xử lý .on() chỉ là một cách hiệu quả hơn để gắn các trình xử lý sự kiện, từ việc có thể đính kèm nhiều trình xử lý sự kiện cùng một lúc, để thêm thông tin bổ sung vào một sự kiện được ánh xạ! – Khez

Trả lời

4

Cá nhân tôi sẽ sử dụng on() cho tất cả các sự kiện ràng buộc từ jQuery 1.7+.

Điều đó có nghĩa là không có sự mơ hồ giữa các yếu tố được thêm động và những yếu tố có sẵn khi tải trang.

Ngoài ra, khi bạn nêu, click() (và các phím tắt sự kiện khác) được chuyển thành on("event", function() { ... }); bởi jQuery, vì vậy nó tiết kiệm một bước trong quá trình - không phải điều này tạo nên sự khác biệt đáng chú ý.

Và cuối cùng, on("click") đọc tốt hơn theo ý kiến ​​của tôi.

+0

Các tài liệu nêu rõ .click() được chuyển thành .bind(), không thành .on(). Đó là lý do tại sao tôi bối rối. – njr101

+2

Trong 1,7+ 'click()' được chuyển thành 'on()'. Tôi đoán họ đã cập nhật tài liệu chưa. –

+0

Cảm ơn câu trả lời rõ ràng Rory. Tôi đã xem qua nguồn JQuery 1.7 để xác nhận - không phải là tôi không tin tưởng bạn;) Cuộc gọi .click() trên thực tế được chuyển thành .bind() như các tài liệu nói. Nhưng .bind() lần lượt được chuyển thành .on(). Vì vậy, có, bạn hoàn toàn đúng. – njr101

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