10

我使用 jquery 作为模块。我的 joomla 模板有一个集成的 jquery 菜单。所以他们互相冲突。

有没有办法解决这个问题。跟随模块的脚本代码

<script type="text/javascript" charset="utf-8">
    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);
             }
         });
     };
</script>
4

5 回答 5

4

解决问题需要做的是取消 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 函数的其他引用。再重复一遍,基本流程是:

  1. 加载 Joomla 的 jQuery
  2. 运行 Joomla 的 jQuery 相关代码
  3. 将 Joomla jQuery 移动到另一个命名空间
  4. 加载你的 jQuery
  5. 使用执行您的代码$()
于 2009-07-21T15:20:48.023 回答
2

尝试

var J = jQuery.noConflict();

之后为您的自定义代码使用 J 变量而不是 $ 或 jQuery

于 2009-07-21T15:11:51.753 回答
1

尝试

jQuery.noConflict();

例如

<script type="text/javascript" charset="utf-8">
    $(document).ready(function () {
        var container = jQuery('div.sliderGallery');
         var ul = jQuery('ul', container);

         var itemsWidth = ul.innerWidth() - container.outerWidth();
         jQuery.noConflict();
         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);
             }
         });
     });
</script>

我已更新您的代码以使用 jQuery 来检查已加载的文档。使用 noConflict 函数的详细信息在这里

于 2009-07-21T15:13:40.910 回答
0

只是将您的 jq 脚本包装在一个自调用函数中。

(function($){
   $(document).ready(function(){

      $('div').click( function(){ alert('ding'); });

   });
})(jQuery);

这会创建一个私有范围,因此您不必担心任何冲突。您可以使用 jQuery.noConflict(); 跳过所有的不安;解决方案,您不必放弃那美妙的美元!当我知道还有其他代码块(例如,任何 cms)在工作时,我会按照习惯这样做——即使在我的测试之后添加了一个新的扩展,它也不应该破坏我的 jQuery。

jQuery Cookbook (http://listic.ru/jQuery_Cookbook.pdf - 第 1.17 章) 中有一个很好的概述。如果它对 Resig 来说足够好,我想它对我有用!

于 2012-01-25T18:42:23.153 回答
0

您的意思是您的 joomla 同时加载了 2 种 jquery 吗?第一个你的菜单加载 jquery 然后你的模块加载 jquery ?

这是解决方案:在 joomla 模板中,我们可以覆盖模块或组件视图(我假设您必须使用 joomla 1.5.x 对吗?)

  1. 在您的模板中创建一个名为 html/ 的目录,例如:templates/yourTemplate/html/

  2. 从 modules/mod_yourMenu/tmpl/.* 复制文件到你的模板 html (templates/yourTemplate/html/mod_yourMenu/) --> * 你不需要添加 tmpl/ *

  3. 编辑里面的php文件并删除所有加载jquery的标签

  4. 对使用 jquery 的模块执行步骤 1-3。

  5. 编辑您的模板,放置标签以加载最新版本的 jquery。

它现在应该可以工作了:)

于 2009-07-21T15:42:15.873 回答