27

プロトタイプを使用するアコーディオン メニューもある html ページで jQuery AutoComplete プラグインを使用しています。

どちらも完全に別々に機能しますが、両方のコンポーネントを 1 つのページに実装しようとすると、理解できないエラーが発生します。

キャッチされない例外: [例外... "コンポーネントがエラー コードを返しました: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" 場所: "JS フレーム :: file:///C:/Documents and Settings /Administrator/Desktop/website/js/jquery-1.2.6.pack.js :: 匿名 :: 11 行目データ: いいえ]

jQuery と競合するファイルは、アコーディオン メニューで使用される「effects.js」であることがわかりました。このファイルを新しいバージョンに置き換えようとしましたが、新しいバージョンではアコーディオンの動作が壊れているようです。

私の推測では、アコーディオンで使用されている「effects.js」ファイルが変更され、アコーディオンのデモ出力が取得されました。また、他のライブラリとの競合を避けるためにjQueryが必要とするオーバーライドメソッドを使用しようとしましたが、うまくいきませんでした。

stickmanlabs.comからアコーディオンのデモを入手しました。

また、jQuery AutoComplete はjQuery サイトから入手できます。

他の誰かがこの問題を経験しましたか?

4

3 に答える 3

118

考えられる解決策は2つあります。古いバージョンのScriptaculousおよびjQueryとの競合がありました(Scriptaculousはネイティブアレイプロトタイプを誤って拡張しようとしていました)-最初にScriptaculousのコピーをアップグレードしてみてください。

それが機能しない場合は、使用する必要がありますnoConflict()(上記で示唆したように)。ただし、落とし穴があります。プラグインをインクルードしているので、特定の順序でインクルードを実行する必要があります。次に例を示します。

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

これが状況を明らかにするのに役立つことを願っています。

于 2008-09-25T22:08:02.367 に答える
10

$jQuery では、他のライブラリとの名前空間の競合を避けるために、jQuery 関数の名前を別の名前に変更できます。

このようなことができます

var J = jQuery.noConflict();

詳細はこちら: michaelshadle.com — jQuery の非競合モード: それが最高であるもう 1 つの理由

于 2008-09-25T17:16:04.517 に答える
8

この場合、両方のライブラリを同時に使用する理由がわかりません。

Prototype の (実際には Scriptaculous の) Ajax.Autocompleterを使用して jQuery を捨てるか、jQuery のAccordionを使用して Prototype を取り除くことができます。

両方のライブラリを同時に使用することは、あまりお勧めできません。理由は次のとおりです。

  1. それらは競合を引き起こす可能性があります。
  2. 両方を含めることで、ユーザーに両方をダウンロードさせることができます。これは帯域幅に優しいアプローチではありません。
于 2008-09-27T03:55:47.270 に答える