select2 Uncaught TypeError: Cannot read property 'fn' of undefined

select2 Uncaught TypeError: Cannot read property 'fn' of undefined

我在 select2 脚本中遇到了这个错误。

完整的堆栈跟踪如下:

Uncaught TypeError: Cannot read property 'fn' of undefined
select2.full.js?ver=4.1:5830 
(anonymous function) select2.full.js?ver=4.1:17 
S2 select2.full.js?ver=4.1:19 
(anonymous function) select2.full.js?ver=4.1:19 (anonymous function)

我认为这一定与 jQuery 以无冲突模式加载(它是一个 Wordpress 站点)有关,但我无法弄清楚哪里出了问题。

第 17 - 19 行是:

factory(jQuery);
  }
}(function (jQuery) {

怎么了?使用 select2 4.0 RC2.

我必须补充一点,一切都按预期工作 - 但控制台上的堆栈跟踪不太好...

好的,有时即使还没有答案,在这里发帖也会有所帮助 :)

将第 5830 行 $.fn.select2.amd = S2; 包装在无冲突安全的包装器中,如下所示:

jQuery(function($) {
    $.fn.select2.amd = S2;
});

错误消失了。我认为 must/will 会在 4.0 最终版本中更改?!

作者几天前修复了这个错误(Fix TypeError)。在 Github 上查看此提交:https://github.com/select2/select2/commit/1f62eb67e89b5b72e9aa91586c5c22d76ffc7ed9

顺便说一句,正确的代码应该是:

jQuery.fn.select2.amd = S2;

我有同样的错误并在 wordpress 中修复了它。 Jquery 库加载早于 bootstrap-modal.js 库。 如果您使用以下方法添加脚本:

add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 5 );
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
wp_enqueue_script('popup' , get_template_directory_uri() . '/js/bootstrap-modal.js', array(), null );

如果您使用相同的方法,请将您的加载优先级从 5 更改为例如 90。