Конфликт Jquery-Mootools
Я пытался заставить работать 2 скрипта (1 mootol и 1 jquery) на одной странице, но безрезультатно… изучал много форумов и все, но я все еще не могу заставить эти 2 работать одновременно.
Вот как это выглядит в моем заголовке:
<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();
в 3-й строке..
проблема в том, что скрипты mootool работают, если jquery.noconflict есть, но скрипты jquery не работают! Теперь, если удалить jquery.noconflict, то теперь, наоборот, скрипт jquery работает, но не скрипты mootool. Я просто не могу заставить их работать!
любая помощь будет принята с благодарностью..
6 ответов
Проблема в том, что вы не заключаете код 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);
Когда ты бежишь в 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 (негативные).
С точки зрения MooTools.
Вы включаете MooTools после jQuery. Это хорошо. Поскольку (если вы не используете jQuery.noConflict), MooTools увидит, что $ уже используется кем-то еще, и оставит его как есть.
Вам придется заменить функцию $ на document.id() в ваших скриптах MooTools.
В jQuery есть режим noConflict. При его использовании вам придется заменить функцию $ из jQuery на jQuery().
Либо вы заменяете вхождения, либо можете использовать анонимные функции, чтобы сохранить ссылки на $ в ваших скриптах и сделать их псевдонимом для document.id() MooTools или 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);
Вы можете попробовать включить библиотеку jQuery перед библиотекой MooTools.
Этот документ должен лучше иллюстрировать
Ты забиваешь $
,
<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>
Использование jQuery
(с учетом регистра) вместо $
для частей JQuery.