2具有相同名称冲突的JS函数

在同一页面使用2个库:jQuery UI和Twitter Bootstrap:

  • jQuery UI对我来说非常重要,因为几乎所有UI东西都是基于它构建的
  • Twitter Bootstrap仅适用于具有下拉菜单function的分割按钮 。

现在,问题是两个库都有相同的命名函数相互冲突:

详细

以下是jQuery UI和Twitter Bootstrap按钮function之间的冲突示例

请进入本网站 。 按表格上的推荐按钮

在此处输入图像描述

将出现jQuery UI模式窗口。 我在模态窗口中使用了jquery ui combobox 。 问题是,没有如jquery ui combobox演示中所示的向下箭头按钮。

在此处输入图像描述

我试图找到导致问题的原因:通过combobox代码查看,当它调用.button()时,它进入bootstrap.min.js,而不是jqui.js.

如您所见,它certificate了2 js库之间的冲突。

顺便说一句,这是jsFiddle ,它没有bootstrap很好地工作。

问题

我有多种方法来解决这个冲突问题(没有触及网站的function)我需要通过下拉菜单(Twitter Bootstrap)获得与拆分按钮完全相同的function:

  • 如果可能的话,在jQuery-UI中(类似这样但有下拉菜单)
  • 否则只在CSS + HTML中

并摆脱Twitter Bootstrap。 非常感谢任何解决方案 我已准备好给予200名代表好的回答(作为赏金)。 Thx提前

当前版本的bootstrap(v2.2.2)现在具有noConflict选项。 只需在你的bootstrap和jquery脚本标签后插入这个地方,但在使用button()函数之前。

  

或者,您可以使用$(document).ready(handler) ,但是仍然必须确保在调用button()之前进行替换。

一旦执行了这行代码, button()将是JqueryUI的按钮, bootstrapBtn()将是Bootstrap的版本。

要修复Bootstrap和jQuery UI函数之间的冲突,请重命名其中一个:

    

然后你可以随意调用每个函数:

  

您可以将此技术用于您需要的任何function。

请记住订单include A -> rename A -> include B

如果您只使用Twitter Bootstrap的下拉插件,则不需要.button()插件。

转到自定义引导页面并取消选择所有jQuery插件,然后仅选择下拉列表。 如果需要,您也可以取消选择一些CSS。


如果你需要两个实现(Twitter Bootstrap和jQuery UI),你可以在bootstrap-button.js文件 .bsButton所有.button重命名bootstrap-button.js (或者在非缩小版本中找到此部分) – 未经测试。

所有其他答案修复jQuery UI按钮和引导按钮之间的冲突,但您不能使用bootstrap data-api重命名button()函数。 仅手动使用新命名的bootstrapBtn()函数。

我找到了解决方案:

  • bootstrap.js文件中查找并替换所有出现的正则表达式(\$[.\w]+\.)button\1btn
  • 或者使用这个sed脚本:

     #!/bin/bash # Change bootstrap3 $.fn.button() function to $.fn.btn() for no conflict with jQuery UI sed "s/\(\$[[:alnum:]._]\+\.\)button/\1btn/g" bootstrap/js/bootstrap.js > bootstrap/js/bootstrap.btn.js sed "s/\(fn\.\)button/\1btn/g" bootstrap/js/bootstrap.min.js | sed "s/button\((\)/btn\1/g" > bootstrap/js/bootstrap.btn.min.js 

之后你可以使用bootstrap data-api进行按钮绑定,也可以手动使用btn()函数代替boot button() for bootstrap,同时仍然使用jQuery UI button()函数。

我建议做自定义jQueryUI或Bootstrap构建 – 两者都在网站上提供这种可能性。

我使用jQueryUI的自定义构建与核心,效果,交互,但没有小部件,这通常会导致冲突。