2012-01-27 31 views
6

I nghĩ rằng xử lý sự kiện được xử lý theo thứ tự mà chúng được đăng ký. Nếu đúng như vậy thì nếu tôi đính kèm một trình xử lý sự kiện vào đầu tập lệnh, tôi có thể chắc chắn rằng nó sẽ kích hoạt trước các trình xử lý tiếp theo được gắn vào cùng một sự kiện không? Ngoài ra các không gian tên sự kiện có ảnh hưởng gì đến điều này không? Các trình xử lý sự kiện có được kích hoạt theo chuỗi (kết thúc trước phần tiếp theo) hoặc song song không?Đảm bảo lệnh xử lý sự kiện jQuery

Tôi muốn làm điều này vì tập lệnh của tôi dựa trên kích thước khung nhìn, thay đổi về sự kiện thay đổi kích thước và tôi cần phải liên tục tìm kiếm nó. Thay vì gọi $(window).width() nhiều lần trong mỗi hàm xử lý của tôi, tôi muốn đặt trình xử lý ở đầu tập lệnh của tôi để lưu $(window).width() vào thuộc tính đối tượng trên mỗi lần thay đổi kích thước. Sau đó, trong các trình xử lý tiếp theo, tôi có thể truy cập thuộc tính và chắc chắn rằng đó là phép đo gần đây nhất.

Tôi biết tôi có thể tạo sự kiện tùy chỉnh kích hoạt ngay khi tính toán được thực hiện và đính kèm trình xử lý tiếp theo vào sự kiện tùy chỉnh. Nhưng, tôi không muốn làm điều đó bởi vì tôi cần phải duy trì khả năng tương tác với các plugin đến sau của tôi mà cũng có thể được gắn vào sự kiện thay đổi kích thước.

+1

Xem http://stackoverflow.com/questions/290254/how-to-order-events-bound-with-jquery – ustun

+0

Bạn có mất hiệu suất đáng kể đối với '$ (cửa sổ) .width()' không? Nếu không, tại sao lại bận tâm? Bạn sẽ chỉ giới thiệu một sự phụ thuộc mong manh vào trạng thái của một biến toàn cầu. – millimoose

+0

@Inerdial Tôi cần gọi nó và một số tính toán khác như 20 lần. Tôi nghĩ nó sẽ tạo nên sự khác biệt. – ryanve

Trả lời

4

Nếu bạn đính kèm trình xử lý sự kiện của mình trước khi bất kỳ tập lệnh nào khác chạy (thậm chí chỉ là plugin), thì cuộc gọi lại của bạn sẽ luôn kích hoạt trước.

Bạn có thể kiểm tra việc hàng loạt các xử lý sự kiện thông qua các đối tượng dữ liệu:

$(window).data('events'); 

Lưu ý: đây là một cách tiếp cận không thành văn bản và có thể không làm việc cuối cùng. Chỉ sử dụng nó để kiểm tra.

+0

xin lỗi cho một sang một bên, là có một cách để truy cập đó với Javascript tinh khiết? –

+3

@ AndréAlçadaPadez - Không. Không chỉ vậy, điều này sẽ chỉ cung cấp cho bạn xử lý sự kiện mà bạn đính kèm bằng cách sử dụng jQuery. –

+1

cảm ơn, tôi đang gặp rất nhiều sự cố với sự kiện javascript :) –

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