2008-09-25 22 views
27

jQuery AutoComplete eklentisini, prototip kullanan bir akordeon menüsünün bulunduğu bir html sayfasında kullanıyorum.jQuery & Prototype Conflict

Her ikisi de ayrı ayrı çalışırlar, ancak her iki bileşeni de tek bir sayfada uygulamaya çalıştığımda, anlayamadığım bir hata alıyorum.

yakalanmamış istisna

: nsresult: [İstisna ... " 0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle] Bileşeni döndürülen hata kodu": "0x80004005 (NS_ERROR_FAILURE)" konum: "JS çerçeve :: dosyası: /// C:/Documents and Ayarlar/Yönetici/Masaüstü/web sitesi/js/jquery-1.2.6.pack.js :: anonim :: hat 11" veriler: no]

öğrendim jQuery ile çakışan dosya, akordeon menüsü tarafından kullanılan 'effects.js' olur. Bu dosyayı daha yeni bir sürümle değiştirmeyi denedim, ancak daha yeni akordeon davranışını kırıyor gibi görünüyor.

Tahminimce akordeonda kullanılan 'effects.js' dosyası akordeon demo çıktısını almak için değiştirildi. Ayrıca jQuery'nin diğer kitaplıklar ile çakışmayı önlemek için gerekli olan ve işe yaramayan, geçersiz kılma yöntemlerini kullanmayı denedim.

Akordeon tanıtımını stickmanlabs.com'dan aldım.

Ve jQuery Otomatik Tamamlamasının jQuery site adresinden edinilebilir.

Bu sorunu yaşayan başka biri var mı?

+0

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

cevap

117

: scriptaculous ve jQuery eski bir sürümü ile bir çakışma (Scriptaculous uzatmak için uğraş yoktu native Array prototype yanlış) - önce Scriptaculous kopyanızı yükseltmeyi deneyin.

Bu işe yaramazsa, noConflict()'u kullanmanız gerekecektir (yukarıda belirtildiği gibi). Ancak, bir yakalama var. Eğer bir eklenti dahil ediyoruz yana örneğin, belirli bir düzen içinde içermektedir yapmanız gerekir: bu durumu açıklığa kavuşturmak için yardımcı olur

<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> 

Umut.

+38

John Resig'den gelen bir cevaptan çok daha iyi olamaz! – alex

8

Bu durumda her iki kütüphaneyi de aynı anda kullanmanın nedenini anlamıyorum.

Prototype (iyi, Scriptaculous 'aslında) Ajax.Autocompleter ve hitch jQuery öğelerini kullanabilir veya jQuery'nin Accordion'unu kullanabilir ve Prototip'ten kurtulabilirsiniz. Onlar çakışmasına neden olabilecek

  1. : çünkü aynı anda hem kütüphaneleri kullanma

    , gerçekten iyi bir fikir değildir.

  2. İkisini de ekleyerek, kullanıcılarınızı her ikisini de indirmeye zorlarsınız. Hangi bant dostu dostu bir yaklaşım değildir.
+0

Kabul. Bunun gibi iki javascript çerçevesini kullanmak için hiçbir zaman iyi bir sebep yoktur. Prototipte jquery ve controller Y'de X kontrolörünü tercih etseniz bile. Ekstra indirme ve çakışmalar. – Espen

+0

* Böyle iki javascript çerçevesini kullanmak için iyi bir neden yoktur. * Evet var. Örneğin, Drupal CMS jQuery ile birlikte gönderilir ve birçok temel modüller bu temel üzerinde genişler ve inşa edilir. Ancak, daha sonra 1: 1 jquery eşdeğerine sahip olmayan nifty javascript gadget'ını eklemek istediğiniz durumlar vardır. Ayrıca, SunSpider benchmark verilerine göre, her javascript framework'ün performansı ile ilgili olarak kendi güçlü ve zayıf yönleri vardır. Bu nedenle Drupal 7'nin varsayılan olarak tüm jQuery kodlarını anonim işlevler içinde sarma haline getirdiğini bilmek harika! –