2010-01-08 25 views
5

Tôi ràng buộc hai trình xử lý sự kiện vào trường nhập trên 'keydown'. Nếu phím enter đã được nhấn, trình xử lý sự kiện đầu tiên cần dừng việc truyền bá sự kiện để nó không nhấn vào eventhandler thứ hai. Tôi đang làm như vậy:jquery firefox stopPropagation()

if (jQuery.browser.msie) { 
        event.cancelBubble = true; 
       } else { 
        event.stopPropagation(); 
       } 

hiện tại chỉ riêng việc này không ngăn sự kiện truyền bá trong IE hoặc Firefox. Nó chạm vào trình xử lý sự kiện đầu tiên, và sau đó chạm vào trình xử lý sự kiện thứ hai. Tuy nhiên, trong xử lý sự kiện thứ hai, tôi thực sự có thể kiểm tra xem (e.cancelBubble) trong trường hợp của IE. Có cách nào để kiểm tra tương tự với Firefox không?

Trả lời

13

Chỉ cần loại bỏ thử nghiệm của bạn cho IE và sử dụng này:

event.stopImmediatePropagation(); 

Mà sẽ giữ các sự kiện khác từ bắn trong cả hai trình duyệt.

event.stopPropagation() sẽ giữ cho các sự kiện không bị bong bóng, nhưng sẽ không giữ các trình xử lý sự kiện khác cho cùng một đối tượng phát sinh.

Để trả lời câu hỏi khác của bạn, nếu bạn chỉ sử dụng event.stopPropagation() bạn có thể kiểm tra event.isPropagationStopped() trong trình xử lý thứ hai.

Gợi ý: như một quy tắc chung jQuery hoàn toàn tóm tắt tất cả hành vi của trình duyệt để cung cấp một giao diện duy nhất cho chức năng. Nếu bạn thấy mình đang chạy if(jQuery.browser.msie) trước khi chạy một hàm jQuery, có lẽ một cách tốt hơn để chạy nó sẽ làm việc qua trình duyệt. Và, khi bạn cần kiểm tra, bạn nên sử dụng jQuery.support để kiểm tra chức năng không phải trình duyệt cụ thể đánh hơi.

+2

wow người đàn ông, làm việc như một sự quyến rũ !! Tôi thậm chí không phải sử dụng isPropagationStopped(), vì stopImmediatePropagation() thực sự hoạt động !! Cảm ơn rất nhiều. – Riz

+0

Điều này thực sự hữu ích. – Nick

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