繁体   English   中英

两个jQuery插件之间的冲突?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM