JQuery与其他JQuery库冲突
我使用jquery作为模块。 我的joomla模板有一个集成的jquery菜单。 所以他们互相冲突。
有没有办法解决这个问题。 遵循模块的脚本代码
window.onload = function () { var container = jQuery('div.sliderGallery'); var ul = jQuery('ul', container); var itemsWidth = ul.innerWidth() - container.outerWidth(); jQuery('.slider', container).slider({ min: 0, max: itemsWidth, handle: '.handle', stop: function (event, ui) { ul.animate({'left' : ui.value * -1},340); }, slide: function (event, ui) { ul.css('left', ui.value * -1); } }); };
你需要做的就是修复你的问题是取消别名jQuery函数并将其分配给另一个变量名(请记住:变量可以是函数)。 您需要使用jQuery.noConflict()
函数来取消$()
函数的别名。 这里有一个要做的:
// ...after all of Joomla's JS is done executing... // before loading your version of jQuery var jquery = {}; // aka new Object() jquery.joomla = jQuery.noConflict(); // moves jQuery into another namespace // load your version
现在,当你加载你的版本时,它将接管jQuery和$
命名空间,但如果你需要它,你仍然会有另一个对Joomla的jQuery函数的引用。 要重新迭代,基本流程是:
- 加载Joomla的jQuery
- 运行Joomla的jQuery依赖代码
- 将Joomla jQuery移动到另一个命名空间
- 加载你的jQuery
- 使用
$()
执行代码
尝试
var J = jQuery.noConflict();
之后使用J变量而不是$或jQuery作为自定义代码
尝试
jQuery.noConflict();
例如
我已更新您的代码以使用jQuery检查加载的文档。 有关使用noConflict函数的详细信息,请单击此处 。
你是说你的joomla同时加载了2种jquery? 首先你的菜单加载jquery然后你的模块加载jquery?
这里是解决方案:在joomla模板中,我们可以覆盖模块或组件视图(我假设您必须使用joomla 1.5.x对吗?)
-
在你的模板中创建一个名为html / eg的目录:templates / yourTemplate / html /
-
将modules / mod_yourMenu / tmpl /.*中的文件复制到你的模板html(templates / yourTemplate / html / mod_yourMenu /) – > *你不需要添加tmpl / *
-
编辑里面的php文件并删除加载jquery的所有标记
-
对使用jquery的模块执行步骤1-3。
-
编辑你的模板,把标签加载到最新版本的jquery。
它现在应该工作:)
只是将jq脚本包装在自调用函数中。
(function($){ $(document).ready(function(){ $('div').click( function(){ alert('ding'); }); }); })(jQuery);
这将创建一个私有范围,因此您不必担心任何冲突。 你可以跳过jQuery.noConflict()的所有不安。 解决方案,你不必放弃那美妙的$! 当我知道在工作中有其他代码块(例如,任何cms)时,我这样做是habbit问题 – 即使在我的测试之后添加了新的扩展,它也不应该破坏我的jQuery。
jQuery Cookbook中有一个很棒的概述(http://listic.ru/jQuery_Cookbook.pdf-第1.17章)。 如果它对Resig足够好,我想这对我有用!