2010-08-12 39 views
7

Tôi là một nhà phát triển ActionScript đang tham gia phát triển jquery/javascript. Tôi có một câu hỏi liên quan đến xử lý sự kiện và ràng buộc/unbinding.JQuery dọn dẹp eventhandlers

Nói ví dụ rằng tôi có cho một div có phần tử img có trình xử lý sự kiện onerror trong đó. Nếu tôi thay thế mà div với một cái mới làm tôi cần phải loại bỏ các eventhandler ràng buộc với các yếu tố img. Vì img không còn trong tài liệu nên các trình duyệt sẽ đủ thông minh để loại bỏ nó hay tôi sẽ bị rò rỉ bộ nhớ gây ra?

Bắt đầu từ ActionScript, tôi thường cố gắng liên tục xóa các trình xử lý sự kiện cũ. Vì vậy, tôi cần phải làm điều này khi viết javascript cho các trình duyệt web?

Các xử lý sự kiện được thêm vào với $('imgElement').error(errorFunction);

+0

Trình xử lý sự kiện được thêm vào như thế nào? –

Trả lời

10

Nếu bạn đang ràng buộc các sự kiện với jQuery chỉ cần gọi .remove() trên phần tử cũ trước khi thay thế hoặc .empty() nếu bạn chỉ muốn xóa nó, cả hai trình xử lý sự kiện dọn dẹp này yếu tố và đó là trẻ em, hoặc trong t trường hợp của anh ta là .empty(), chỉ là con cái.

Nếu bạn chỉ thay thế nó, ví dụ: .html(content) bạn sẽ bộ nhớ bị rò rỉ, vì mọi trình xử lý hoặc dữ liệu cho các thành phần đó sẽ được để lại trên đối tượng $.cache.

+2

tôi không biết rằng .html (nội dung) sẽ bị rò rỉ bộ nhớ! cảm ơn! – Patricia

+0

Bạn có chắc chắn không? Nhìn vào mã nguồn jQuery, dòng manipulation.js 203: "// Loại bỏ các nút phần tử và ngăn chặn rò rỉ bộ nhớ" – Phil

+0

@ phil- Nếu bạn nhìn vào mã trước nó, bạn sẽ thấy có một số điều kiện để xác định xem mã đó thực hiện :) SO Chat có cùng một vấn đề rò rỉ bộ nhớ trong bản xem trước đầu tiên, đây là nguyên nhân. –

0

hãy thử sử dụng firequery, một plugin firefox nó cho thấy tất cả người nghe sự kiện hoạt động và jquery.data()

Tôi cũng tò mò như để cho dù đó là thực hành tốt nhất để unbind() events ...

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