2012-08-10 10 views
7

私はオートコンプリートを行うために2つの競合するjqueryプラグインがある大きなサイトで作業しています。また、使用しています同じ機能名を持つ2つのjqueryプラグインの間で競合が発生する

$.fn.extend({ 
    autocomplete: function ... 

2)jquery.ui.autocomplete.js(最新のjQuery UIライブラリから)、:ない

1)jquery.autocomplete.js(jQueryのUIの一部ではありません)オートコンプリートキーワード。

$.widget("ui.autocomplete", { ... 

私は唯一の第二を使用していていることを指定する方法があり、jquery.uiウィジェット 2つのファイルを変更することなく、

$("#tags").autocomplete ... 

を呼び出しますか?

+0

jquery.autocomplete.jsはgithub上の別のプロジェクトであるようですが、jquery.ui.autocompleteは公式のjqueryプラグインです。 1を使用して、他のフルストップを削除できませんか?公式のオートコンプリートはあなたが必要とするすべてのことをしないのですか?それはちょうど彼らがサイドバイサイドで働くことを意図しているようには思われません – Nope

+0

jquery.autocomplete.jsを変更または削除できません。私が持っているものは、あなたがやっているgitバージョンではなく、可能な解決策は、$( "#tags")のようなもので第2の(ui)バージョンにアクセスできるようにすることです.ui.autocomplete –

+0

"1つは使用しない"というのは実際には名前の衝突の解決策ではありません。また、2つの図書館が同じ名前を持っているという理由で一緒に働くことを意図していなかったと言っても意味がありません。彼らはお互いの存在を必ずしも認識していません。 – Triynko

答えて

9

2番目のオートコンプリートは、$.Widget jQueryに登録する方法を使用しているため、社内の動作を変更するのが最も簡単です。

2つのスクリプトのロードの間でjQueryオブジェクトの変更が一種のものになります。これらはお互いに競合する(または上書きする)ためです。

$().autocomplete() 

は、jQueryのUIのバージョンを使用して、

$().ourautocomplete() 

は、あなたのローカルバージョンを使用します。

<script src="jquery.autocomplete.js"> </script> 
<script> 
    // rename the local copy of $.fn.autocomplete 
    $.fn.ourautocomplete = $.fn.autocomplete; 
    delete $.fn.autocomplete; 
</script> 
<script src="jquery-ui.autocomplete.js"> </script> 

、その後になりますどの:

私はこれをしようとするだろう。

2

jQuery UIのタブ機能でやってみましたが、同じように動作するはずです。 機能は、技術的にjsオブジェクトであるので、あなたは、単に名前を変更できます役立ちます

$.fn.tabs2 = $.fn.tabs; 
    delete $.fn.tabs; 
    $("#tabz").tabs2({}); 

願っています!

編集

オリオン座ゼータ星はあなたにも、前の関数の名前を削除する必要があり、提案のように。 また、.fnが必要だと思います。

+0

いいアイデアだけど、これを試してみるとうまくいくようです:http:// jsfiddle。net/turaaa/mbZgS/ –

+0

Alnitakの提案のように、前の関数の名前も削除する必要があります。 –

+0

@GilZumbrunnenそして、あなたが2番目の関数をロードしようとする前にそれを行うことが重要です! – Alnitak

関連する問題