2010-06-30 116 views
3

我正在爲一個客戶端網站開發幾個jQuery插件,它將允許表單元素(如收音機,複選框和選擇)的樣式。我一直在將它們作爲同一個文件中的三個獨立插件進行開發,雖然收音機和複選框插件似乎並行運行良好,但我的選擇給了我麻煩,因爲它似乎阻止了收音機和複選框的工作!如果我刪除它,另外兩個工作再次罰款。兩個jQuery插件之間的衝突?

我認爲我之間有某種衝突,但我不確定它可能在哪裏。如果我註釋掉所有選擇插件的代碼,除了它的「設置」聲明,收音機和複選框都會中斷。如果我刪除設置,收音機和複選框會再次開始工作,所以看起來衝突在設置中。

我已經宣佈了插件選項在所有三個(只是用自己的缺省值)是相同的:

jQuery.fn.ioFormSelect = function(options) { 
    //Default options. 
    settings = jQuery.extend({ 
     'maxOptions': 8, 
     'fieldClass': 'ui-field-select', 
     'selectedClass': 'ui-field-selected', 
     'openClass': 'ui-field-select-open', 
     'closeClass': 'ui-field-select-close', 
     'disabledClass': 'ui-field-disabled', 
     'optionClass': 'ui-field-option', 
     'optionGroupClass' : 'ui-field-option-group' 
    }, options); 

    //Plugin code 

}); 

我在做什麼錯?我認爲以這種方式聲明的變量是「本地」的,而「全局變量」是事先由「var」定義的。我必須爲每個插件都有一個單獨的設置變量嗎? :S 非常感謝您的任何建議。 :)

回答

3

你在這裏缺少一個關鍵字,var,像這樣:

var settings = jQuery.extend({ 

沒有var,你正在創建一個全球變量稱爲settings,這當然會導致問題多的時候一個插件嘗試使用它,如果你不打算分享:)

例如you can test it like this

​$("body").ioFormSelect(); 
alert(window.settings.maxOptions);​​​ //alerts "8" 

有沒有在這個問題上的話題更詳細的討論:Difference between using var and not using var in JavaScript

+0

謝謝!從PHP環境到Javascript,所以雖然我可以很快得到一個工作腳本,但我不熟悉這些細節中的很多。 :) – Fourjays 2010-07-01 08:59:08