【问题标题】:script reference causes conflict脚本引用导致冲突
【发布时间】:2012-01-22 12:42:04
【问题描述】:

我有代码 1,它在头部执行:

<link class="jsbin" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script class="jsbin" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js"></script>

然后我有代码 2:

<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
<script src="livesearch.js" type="text/javascript"></script>

问题是,当我放最后一个参考(代码 2)时,第一个不再起作用了.. 我做错了什么?

(由于某种原因,代码 2 对 jquery 1.7 没有反应)

【问题讨论】:

  • 你到底为什么在 1.7.1 版本和 1.4.3 版本中包含 jquery 一次??
  • 不! sry man,你没有回答 - 为什么你甚至认为这是/应该是可能的?
  • 是的,我做到了:(由于某种原因,代码 2 对 jquery 1.7 没有反应)
  • @Youss 一个比.noConflict() 更简单的解决方案可能是找到与1.7 一起使用的livesearch.js 的替代品或更新库。大多数基于 jQuery 构建的库都足够小,这应该不会太难。
  • @Inerdial 谢谢,我会尝试这样做

标签: javascript jquery


【解决方案1】:

你需要的是这个:jQuery.noConflict

如果需要,我们也可以通过 传递 true 来释放 jQuery 名称 作为方法的参数。这很少有必要,如果我们必须 这样做(例如,如果我们需要使用多个版本的 jQuery 库在同一页面上)

例如:

<script class="jsbin" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="javascript">
// now you alias the v1.7 jQuery to jQuery17
jQuery17 = jQuery.noConfict(true);
</script>

<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
<script type="javascript">
// now you alias the v1.4 jQuery to jQuery14
jQuery14 = jQuery.noConfict(true);
</script>

然后将两部分代码放在不同的范围内。

(function($){
//put your codes here which need jQuery 1.7 version
.....
})(jQuery17);

(function($){
//put your codes here which need jQuery 1.4 version
.....
})(jQuery14);

【讨论】:

  • @AndreasNiedermair 嘿伙计,你不知道你能做到吗jQuery.noConflict(true);
  • 其实......“我通过在.noConflict(true)中使用true参数解决了它,但它仍然给jquery ui带来问题并且并不完美”
  • 如果释放名称,如何访问不同的版本?
  • @AndreasNiedermair jQuery.noConflict 返回 jQuery 自我。
  • 你将如何将 1.4.3 版注入到 live-search 组件中,这显然需要 1.4.3 版?
【解决方案2】:

删除

<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>

<script class="jsbin" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

来自您的代码。

实际上,您在 1.7.1 中包含一次 jquery,在 1.4.3 中包含一次。 jQuery.noConflict 有一个解决方案 - 但请查看 xdazz's answer

编辑:

因此,如果您尝试包含在 &lt;script src="livesearch.js" type="text/javascript"&gt;&lt;/script&gt; 中的库不起作用,则它可能无法在 1.7.1 版中实现 - 所以请参阅作者网站/文档以获取更多信息,其中 jquery-framework他/她执行的版本。如果你知道这一点,你必须坚持使用这个版本,除非作者意识到更新(虽然许多组件是独立于版本编写的,但有时 jquery 会破坏一些内部)。

【讨论】:

  • 就像我说的:(由于某种原因,代码 2 对 jquery 1.7 没有反应)
  • @Youss 只是不包含 jquery 两次......要么使用 1.7.1 要么使用 1.4.3 - 但不同版本的双重包含很糟糕!
  • 如果我选择其中一个,则两个代码之一将不起作用。也许 jqueryui/1.8.13/jquery-ui.min.js 有一个等价物,所以它可以与 1.4.3 一起使用 ...
  • @Youss 实际上 jqueryUI 1.8.13 应该与 jquery 1.4.3 一起使用(根据jqueryui.com,它声明:“稳定(1.8.17:jQuery 1.3.2+)”)跨度>
  • 让我们忘记两次 jquery (只是为了简单..)请看一下jsfiddle.net/4az8f 你可以看到它适用于 1.7 但不适用于 1.4 你能解释一下为什么那是?
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多