2011-09-12 155 views
2

我一直在试图使2个脚本(1 mootol和1 jquery)在同一页工作无济于事。研究了许多论坛和所有,但我仍然不能使2工作同时进行。Jquery-Mootools冲突

这是怎么看我的头:

<script type="text/javascript" src="<?php bloginfo('url'); ?>/wp-content/plugins/buddypress/bp-themes/bp-default/js/jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
    jQuery.noConflict(); 
$(document).ready(function() { 
     var hide = false; 
    $("#posts-menu, .submenu").hover(function(){ 
     if (hide) clearTimeout(hide); 
     $(".submenu").fadeIn(); 
    }, function() { 
     hide = setTimeout(function() { 
      $(".submenu").fadeOut("slow"); 
     }, 250); 
    }); 

})(jQuery); 
    </script>  
<script type="text/javascript" src="<?php bloginfo('url'); ?>/wp-content/plugins/buddypress/bp-themes/bp-default/js/mootools-core-1.3.2.js"></script> 
<script type="text/javascript" src="<?php bloginfo('url'); ?>/wp-content/plugins/buddypress/bp-themes/bp-default/js/mootools-more-1.3.1.1.js"></script> 
<script type="text/javascript" src="<?php bloginfo('url'); ?>/wp-content/plugins/buddypress/bp-themes/bp-default/js/wall.js"></script> 
<script type="text/javascript" src="<?php bloginfo('url'); ?>/wp-content/plugins/buddypress/bp-themes/bp-default/js/wall-lide.js"></script> 

<script type="text/javascript"> 
<!-- 

window.addEvent('domready',function(){ 


    // -- horizontal 
    var myHorizontalSlide = new Fx.Slide('login-welcome-div-slide', {mode: 'vertical'}); 


    $('slideout').addEvent('click', function(event){ 
     event.stop(); 
     myHorizontalSlide.slideOut(); 
    }); 


}); 

// --> 
</script> 

我管理MooTools的脚本,即使那里有一个jquery.js和电话... 你可以看到,我已经在第三使用jQuery.noConflict();工作线..

问题是,如果jquery.noconflict存在,但jQuery脚本不起作用,mootool脚本工作!现在,如果从现在开始移除jquery.noconflict,那么jquery脚本就可以工作,但不能使用mootool脚本..我不能让其中的2个工作!

任何形式的帮助将不胜感激..

回答

1

问题是你没有在匿名函数中包含jQuery代码。试试这个:

(function($){ 
    // inside here $ will always mean jQuery 
    $(document).ready(function() { 
     var hide = false; 
     $("#posts-menu, .submenu").hover(function(){ 
      if (hide) clearTimeout(hide); 
      $(".submenu").fadeIn(); 
     }, function() { 
      hide = setTimeout(function() { 
       $(".submenu").fadeOut("slow"); 
      }, 250); 
     }); 
    }); 
})(jQuery); 
+0

令人惊叹!这个工作!我很开心!原谅我..大声笑!非常感谢你这样做。^ _^ –

+0

@丹:很高兴我帮了忙。随意[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235),这个问题被标记为已解决。 – Shef

+0

哦,好的!完成了!我按了上面的按钮,但它没有工作至少15声望,再次感谢! –

0

使用jQuery(区分大小写),而不是$为jQuery的部分。

2

当您在noConflict模式下运行时,不能使用$便利方法。您必须改用完整的表格jQuery

jQuery.noConflict(); 
// Do something with jQuery 
jQuery("div p").hide(); 
// Do something with another library's $() 
$("content").style.display = 'none'; 

请避免使用2个js库,因为它会增加你的页面加载时间,而这又会影响到SEO(否定的)。

+0

看起来像WordPress给我。 – alex

+0

你写了,手指移动比脑子快...但是我从来没有看到使用2库的点... – Ali

0

你正在破坏$

<script type="text/javascript"> 
    $.noConflict(); 
    jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
    }); 
    // Code that uses other library's $ can follow here. 
</script> 
+0

我试过这个..jquery的作品,但mootools doesnt ..我不能在这里发布的代码,其太长了 –

0

你可以尝试在MooTools库之前包含jQuery库。

document应该说明更好

1

从一个MooTools的点。

您在jQuery之后加入了MooTools。那很好。因为(如果你不使用jQuery.noConflict),MooTools将会看到$已被其他人使用,并将保持原样。

您将不得不在您的MooTools脚本中用document.id()替换$函数。

jQuery有这个noConflict模式。在使用它时,你必须用jQuery()替换jQuery中的$函数。

要么替换出现次数,要么使用匿名函数将脚本中的引用保留为$,并使其成为MooTools的document.id()或jQuery的jQuery()的别名。

(function($) { 
    // $ will refer to MooTools' document.id() in this anonymous function 
    // ... 
})(document.id); 

(function($) { 
    // $ will refer to jQuery's jQuery() in this anonymous function 
    // ... 
})(jQuery);