[英]Conflict between two 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非常感谢任何建议。 :)
你在这里丢失一个关键字var
,如下所示:
var settings = jQuery.extend({
如果没有var
,你将创建一个名为settings
的全局变量,当你不打算分享它时,当多个插件试图使用它时,这当然会引起问题:)
例如, 您可以像这样测试它 :
$("body").ioFormSelect();
alert(window.settings.maxOptions); //alerts "8"
在这个问题中有关于该主题的更详细的讨论:在JavaScript中使用var和不使用var之间的区别
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.