Конфликт между двумя плагинами 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 Заранее большое спасибо за любой совет. :)


person Fourjays    schedule 30.06.2010    source источник


Ответы (1)


Здесь отсутствует ключевое слово var, например:

var settings = jQuery.extend({

Без var вы создаете глобальную переменную с именем settings, что, конечно, вызовет проблемы, когда ее попытается использовать несколько плагинов, когда вы не собираетесь Поделиться этим :)

Например, вы можете проверить это следующим образом:

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

В этом вопросе есть более подробное обсуждение этой темы: Разница между использованием var и неиспользованием var в JavaScript

person Nick Craver    schedule 01.07.2010
comment
Спасибо! Переход от среды PHP к Javascript, поэтому, хотя я могу довольно быстро получить рабочий сценарий, многие из этих тонких моментов мне незнакомы. :) - person Fourjays; 01.07.2010