2012-01-20 93 views
2

我一直在環顧四周,找不到明確的答案。所以我正在對現有的jQuery插件進行迭代jquery.autocompletejQuery擴展類和函數問題

所以我有一個jquery自動完成插件,我需要修改一些東西。

第1步:需要擴大默認值(這工作)

$.extend($.Autocompleter.defaults, customeDefaults); 

這個工作,現在我想延長在那裏這些默認值將得到安置的功能。我掛斷涉及這樣的:

在自動完成我有這樣

$.Autocompleter.Select = function() { 
    //a bunch of stuff in this class including: 
    function init() { 
     //this is the function that I need to extend. 
    } 
} 

的設置我嘗試這個

$.extend($.Autocompleter.Select.init, myChanges); 

它沒有工作 然後我做了一個

console.log($.Autocompleter.Select.init()); 

並且它產生了一個類型錯誤,指出Select沒有方法init ...它執行的操作。有任何想法嗎?

+0

在這裏Jsfiddles總是有幫助的。 – mowwwalker

回答

2

當前設置的方式,您不能擴展init函數,因爲它沒有綁定到$ .Autocompleter.Select對象 - 它只是被聲明爲一個函數。

相反,如果函數被像這樣定義的,你可以擴展它:

$.Autocompleter.Select = function() { 
    return { 
     this.init() { 
     //implementation 
     } 
    } 
} 

編輯:好吧,查看源後有真的是沒有辦法擴展初始化函數。你可能可以擴展調用init()的顯示方法,並讓它先做你想做的事,然後調用原始版本。該方法非常類似於this other question

var old_display = $.Autocompleter.Select.display; 
$.Autocompleter.Select.display = function(args) { 
    //whatever you need to do first 
    old_display.apply(this, args); 
} 
+1

http://jquery.bassistance.de/autocomplete/jquery.autocomplete.js這是我使用的版本的鏈接 – Brodie