我正在为客户端网站开发一些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 非常感谢任何建议。 :)
答案 0 :(得分:3)
您在这里错过了一个关键字var
,如下所示:
var settings = jQuery.extend({
如果没有var
,您就会创建一个名为settings
的全局变量,当多个插件尝试使用它时,这当然会导致问题't 打算分享它:)
$("body").ioFormSelect();
alert(window.settings.maxOptions); //alerts "8"
在这个问题中有关于该主题的更详细的讨论:Difference between using var and not using var in JavaScript