-1

現在の要件の一部として、2 つのオートコンプリート ボックスが必要です。以前はオートコンプリート バージョン 1.0.2 で実装されていた通常のオートコンプリート ボックスが既にありましたが、オートコンプリート UI バージョン 1.8.16 で別のオートコンプリート ボックスを実装しました。そのため、同じページで複数のバージョンの jQuery オートコンプリートを実行する必要があり、競合のような問題が発生しています。もちろん、以前に実装されたオートコンプリート ボックスをやり直したりアップグレードしたりすることはできません。

問題: オートコンプリート 1 (1.0.2 で実装) は、オートコンプリート プラグイン 1.8.16 をコメントした場合にのみ機能します。

両方の機能を動作させたい。

これについて何ができるか教えてください。

どんなリードでも大歓迎です。

ありがとう

4

1 に答える 1

0

100%確実ではないため、これに答えることを躊躇しますが、プラグインの2つのバージョンは、同じ名前(たとえば)を持っている限り、同じjQueryインスタンスに共存できないと確信しています$.autocomplete。ただし、この問題を回避することはできます。これが私がそれらをどれだけ推薦するかによってソートされたいくつかの例です:

  • 古いオートコンプリートの実装をアップグレードして、バージョン1.8を使用します
  • 新しい実装には古いバージョンのオートコンプリートを使用するだけです
  • プラグインの新しいバージョンの名前をautocomplete2のようなものに手動で編集します。これを手動で行うか、プラグインインクルード間で行います(以下を参照)
  • 同じページでjQueryの2つの別々のインスタンスを使用し、各オートコンプリートプラグインバージョンをそれぞれのjQueryインスタンスにロードします。これを行うには、各jQueryバージョンを読み込んだ後に呼び出し、それらを別々の変数にjQuery.noConflict格納します。window.$window.$2

バージョンの動的な名前変更(Samuel Rossilleの回答から取得、古いオートコンプリートの実装を壊さないように編集)

<!-- First include the new autocomplete plugin (1.8) -->
<script type="text/javascript" src="path/to/autocomplete version 1.8"></script>
<script type="text/javascript">
    // Then 'rename' the plugin to something else, e.g. autocomplete18
    jQuery.fn.autocomplete18 = jQuery.fn.autocomplete;
</script>
<!-- Then include the old version, which will overwrite jQuery.autocomplete -->
<script type="text/javascript" src="path/to/autocomplete version 1.0"></script>

<script>
    // $.autocomplete18 should now contain the new autocomplete version
    // $.autocomplete should contain the old version, not breaking the previous
    // implementation
</script>
于 2012-05-31T12:12:32.177 に答える