如何解决select2 3.5和4.0冲突

时间:2016-04-22 04:45:47

标签: javascript jquery jquery-select2 jquery-select2-4

虽然不是那个具体问题,但这里描述的问题 - https://wordpress.org/support/topic/select2-conflicting-with-acf-v5基本上也是我的问题。

一个wordpress网站有两个wordpress插件,一个使用select2版本3.5来处理所有选择元素,另一个(包含在我写的插件中)使用4.0来处理一些特定的元素。这导致错误

  

错误:select2.min.js?ver = 3.4.5:21未捕获错误:当附加到元素时,Select2不允许选项'multiple'。

这种问题有没有解决办法?我是否应该尝试检测3.5已加载并尝试避免设置冲突?也许尝试让“my”select2首先加载并希望因为我更具体,不会与使用3.5的代码冲突? (我对jQuery内部的知识缺乏,当不同的插件尝试使用相同的名称时会发生什么?)

2 个答案:

答案 0 :(得分:2)

我的插件Popup Maker面临同样的问题。我发现这个select2 multiple versions on same page/site可能很有用,我认为唯一的问题就是我们不能总是控制插件使用wp_enqueue_script加载他们的JS。

好的,我所做的是让我的脚本需要select2(DUH),然后就在我的脚本框内我做了类似的事情。

$.fn.pumSelect2 = $.fn.select2;

然后,而不是调用.select2()我使用.pumSelect2()

这适用于我的情况,即我使用v4,其他人使用v3.5,有些甚至将其引导到自己的admin.js文件中,因此即使select2已经加载也会加载。

所有这一切都是黑客攻击,但是因为我们通过使用wp_enqueue_script加载正确的方式。

如果select2入队,我也会将其取消。

// Deregister older versions, loaded by Types, Advanced Custom Fields etc.
if ( wp_script_is( 'select2', 'registered' ) ) {
    wp_deregister_script( 'select2' );
}
wp_register_script( 'select2', $js_dir . 'select2.full' . $suffix, array( 'jquery' ), '4.0.1' );

`

现在的最终方法

经过进一步的测试,因为很多其他插件使用的旧版本可能会打破这个版本,这就是我想出来的。

在我的select2.full.js文件中

对于加载jQuery并调用factory

的开始部分
(function (factory) {
    var existingVersion = jQuery.fn.select2 || null;

    if (existingVersion) {
        delete jQuery.fn.select2;
    }

    if (typeof define === 'function' && define.amd !== undefined && define.amd) {
        // AMD. Register as an anonymous module.
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node/CommonJS
        factory(require('jquery'));
    } else {
        // Browser globals
        factory(jQuery);
    }

    jQuery.fn.pumselect2 = jQuery.fn.select2;

    if (existingVersion) {
        delete jQuery.fn.select2;
        jQuery.fn.select2 = existingVersion;
    }
}(function (jQuery) {

基本上我在这种情况下将它引导到一个新名称pumselect2,如果以前有一个加载的版本我恢复它,否则我擦除平板,以便如果加载另一个没有冲突出现。

此外,我将我的wp_enqueue_script句柄修改为pumselect2,以便即使其他人加载select2也会加载它。

希望有所帮助。

答案 1 :(得分:0)

对于WordPress插件作者使用select2我的回答:Jquery Select2 plugin version check可以为版本检查提供一些指导。