两个jQuery插件之间的冲突?

时间:2010-06-30 23:24:09

标签: javascript jquery jquery-plugins

我正在为客户端网站开发一些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

});

我做错了什么?我认为以这种方式声明的变量是“本地的”,“全局”由事先“单词”定义。我必须为每个插件设置一个单独的设置变量吗? :S 非常感谢任何建议。 :)

1 个答案:

答案 0 :(得分:3)

您在这里错过了一个关键字var,如下所示:

var settings = jQuery.extend({

如果没有var,您就会创建一个名为settings全局变量,当多个插件尝试使用它时,这当然会导致问题't 打算分享它:)

例如you can test it like this

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

在这个问题中有关于该主题的更详细的讨论:Difference between using var and not using var in JavaScript