2008-09-25 48 views
27

Tôi đang sử dụng plugin jQuery AutoComplete trong trang html nơi tôi cũng có menu accordion sử dụng mẫu thử nghiệm.Xung đột jQuery & Prototype

Cả hai đều hoạt động hoàn toàn riêng biệt nhưng khi tôi cố gắng triển khai cả hai thành phần trong một trang, tôi gặp lỗi mà tôi không thể hiểu được.

còn tự do ngoại lệ: [ngoại lệ ... "Component trả về mã thất bại: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" vị trí: "JS khung :: file: /// C:/Documents and Settings/Administrator/Desktop/trang web/js/jquery-1.2.6.pack.js :: nặc danh :: dòng 11" dữ liệu: no]

tôi phát hiện ra các tập tin xung đột với jQuery là 'effects.js' được sử dụng bởi menu accordion. Tôi đã thử thay thế tập tin này với một phiên bản mới hơn nhưng mới hơn dường như phá vỡ hành vi accordion.

Đoán của tôi là tệp 'effects.js' được sử dụng trong accordion đã được sửa đổi để có được kết xuất đầu ra accordion. Tôi cũng đã thử sử dụng các phương thức ghi đè jQuery cần tránh xung đột với các thư viện khác và điều đó không có tác dụng.

Tôi đã nhận được bản trình diễn accordion từ stickmanlabs.com.

Và jQuery AutoComplete có thể được lấy từ jQuery site.

Có ai khác đã gặp sự cố này không?

+0

http://docs.jquery.com/Using_jQuery_with_Other_Libraries – giorgio79

Trả lời

117

Có hai giải pháp khả thi: Có một mâu thuẫn với một phiên bản cũ của Scriptaculous và jQuery (Scriptaculous đã cố gắng để mở rộng nguyên mẫu Array không chính xác) - trước tiên hãy thử nâng cấp bản sao của Scriptaculous.

Nếu điều đó không hoạt động, bạn sẽ cần phải sử dụng noConflict() (như được ám chỉ ở trên). Tuy nhiên, có một bắt. Vì bạn bao gồm plugin mà bạn cần phải thực hiện bao gồm theo một thứ tự cụ thể, ví dụ:

<script src="jquery.js"></script> 
<script src="jquery.autocomplete.js"></script> 
<script> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($){ 
    $("#example").autocomplete(options); 
    }); 
</script> 
<script src="prototype.js"></script> 
<script src="effects.js"></script> 
<script src="accordion.js"></script> 

Hy vọng điều này sẽ giúp làm rõ tình hình.

+38

Không thể tốt hơn nhiều so với câu trả lời của chính John Resig! – alex

8

Tôi không thực sự thấy lý do sử dụng cả hai thư viện cùng một lúc trong trường hợp này.

Bạn có thể sử dụng Prototype (tốt, Scriptaculous 'thực sự) Ajax.Autocompleter và mương jQuery, hoặc bạn có thể sử dụng jQuery Accordion và loại bỏ Prototype.

Sử dụng cả hai thư viện cùng một lúc là không thực sự là một ý tưởng tốt, bởi vì:

  1. Họ có thể gây ra xung đột.
  2. Bằng cách bao gồm cả hai, bạn buộc người dùng phải tải xuống cả hai. Mà không phải là cách tiếp cận thân thiện với băng thông.
+0

Đồng ý. Không bao giờ có một lý do chính đáng để sử dụng hai khung công tác javascript như thế này. Thậm chí nếu bạn thích điều khiển X trong jquery và bộ điều khiển Y trong nguyên mẫu. Tải xuống và xung đột bổ sung. – Espen

+0

* Không bao giờ có lý do chính đáng để sử dụng hai khung công tác javascript như thế này. Ví dụ, Drupal CMS gửi cùng với jQuery và nhiều mô-đun được đóng góp mở rộng và xây dựng trên nền tảng này. Tuy nhiên, có những tình huống mà sau đó bạn muốn thêm tiện ích javascript tiện lợi mà không có tương đương jquery 1: 1. Ngoài ra, theo dữ liệu điểm chuẩn SunSpider, mỗi khung javascript có điểm mạnh và điểm yếu riêng về hiệu suất .. vì vậy thật tuyệt khi biết Drupal 7 cuối cùng mặc định gói tất cả mã jquery trong các chức năng ẩn danh! –

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