这个答案基本上与建议的其他一些答案一致:最后加载引导程序。这个答案只是增加了更多信息。
我在使用 Bootstrap 2.3.2 和 jQuery UI 1.10 时看到了这一点。正如bootstrap bug #6094 中所述,他们都想实现:
jQuery(selector).button()
所以最后加载的那个“获胜”。
特别是,如果最后加载 jQueryUI,那么这个标准的 bootstrap 2.3.2 按钮组标记不起作用:
<div class="btn-group" data-toggle="buttons-checkbox">
<button type="button" class="cm-toggle-btn toggles btn btn-mini active" name="foo">
Foo
</button>
<button type="button" class="cm-toggle-btn toggles btn btn-mini active" name="bar">
Bar
</button>
</div>
(它会创建一个如下所示的按钮组:)
当您单击按钮组中的某个按钮时,会调用 jQueryUI 的 .button() 并生成 Error: cannot call methods on button prior to initialization; attempted to call method 'toggle' 错误。
可以更改顺序并最后加载引导程序,但随后 jQuery UI 的$().button()(以及因此.slider() 和.dialog())停止工作。 :-(
因为,唉,我们都需要同时工作,所以我们这样做了:由于其他原因,我们首先加载 jQueryUI 很复杂,所以围绕 jQueryUI,我们放了:
<script>
let bootstrapButton = jQuery.fn.button;
</script>
<script src="jqueryUIsource.js"></script>
<script>
jQuery.fn.jQueryUIButton = jQuery.fn.button;
jQuery.fn.button = bootstrapButton;
</script>
然后,在需要 jQueryUI 引导的页面部分中,暂时将 jQueryUI 的 .button() 实现(存储在 jQuery.fn.jQueryUIButton)重新设置为 jQuery.fn.button。这是一个凌乱的黑客,但有点工作。如果我们想在同一页面上加载两者,我认为我们不能做得更好。
这个codepen 证明它可以被使用。