2012-08-10 57 views
7

我正在一個大型站點工作,該站點包含2個用於執行自動完成的衝突jQuery插件。具有相同功能名稱的兩個jQuery插件之間的衝突

1)jquery.autocomplete.js(未jQuery的用戶界面的一部分)的作用:

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

2)jquery.ui.autocomplete.js(從最新jQuery UI的庫),也使用自動完成關鍵字。

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

有沒有辦法來指定,我使用只有第二,jquery.ui部件 調用

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

時不改變2個文件?

+0

jquery.autocomplete.js似乎是github上的一個單獨項目,而jquery.ui.autocomplete是官方的jquery插件。你不能只使用1,並刪除其他fullstop?官方的ui自動完成功能是否不能滿足你需要的一切?看起來他們並不喜歡並肩工作 – Nope 2012-08-10 09:43:21

+0

我不能改變或刪除jquery.autocomplete.js,我想我的是一個內部版本,而不是你正在嘗試的git版本。一個可能的解決方案是能夠訪問第二個(ui)版本,如$(「#tags」).ui.autocomplete – 2012-08-10 11:21:28

+0

「不要使用一個」根本不是解決名稱衝突的方法。另外,說兩個圖書館不是爲了一起工作,僅僅因爲它們具有相同的名稱,是沒有意義的;他們不一定意識到對方的存在。 – Triynko 2015-12-07 20:55:39

回答

9

由於第二個自動完成使用$.Widget方法註冊自己與jQuery它將是最容易改變內部的行爲。

如果沒有對兩個腳本加載之間的jQuery對象進行某些更改,您將無法加載它們,因爲它們只會相互衝突(或覆蓋)。

我想試試這個:

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

這將然後進行:

$().autocomplete() 

使用jQuery UI的版本,

$().ourautocomplete() 

使用本地版本。

2

我試圖用jQuery UI的標籤功能來做到這一點,它應該爲你工作。 一個功能在技術上是一個js對象,所以你可以簡單地將其重命名:

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

希望幫助!

編輯

像參宿一建議,還需要刪除以前的函數的名稱。 另外,我認爲.fn是必需的。

+0

不錯的主意,但我試過,它似乎工作:http:// jsfiddle。net/turaaa/mbZgS/ – 2012-08-10 11:58:28

+0

與Alnitak建議的一樣,您還需要刪除前一個函數的名稱。 – 2012-08-10 12:06:50

+0

@GilZumbrunnen在你嘗試加載第二個函數之前,這麼做很重要! – Alnitak 2012-08-10 12:08:32

相關問題