Использование jQuery noConflict () с script.aculo.us - PullRequest
1 голос
/ 15 декабря 2011

У меня есть сайт, использующий «виджет» (из http://healcode.com), который включает script.aculo.us JavaScript-библиотеку. Проблема в том, что сайт, который я создаю, находится на WordPress Таким образом, есть классический jQuery против script.aculo.us конфликт.

Я знаю, что мне нужно запустить jQuery в режиме .noConflict(), но я должен неправильно понимать синтаксис. Когда я присваиваю $ jQuery .noConflict следующим образом, он все равно отключает функции script.aculo.us:

var $ = jQuery.noConflict();

$(document).ready(function () {

    //#nav-main dropdown effects

    $('#nav-main ul li').hoverIntent(function () {
        $(this).find('.dropdown').stop(true,true).slideDown('900'); },
            function(){
                $(this).find('.dropdown').stop(true,true).slideUp('500');
        });
}); // end document.ready

Я знаю, что присваиваю $ jQuery в режиме .noConflict(), и я предполагаю, что script.aculo.us (который загружается через виджет в основном теле, поэтому ПОСЛЕ jQuery) пытается повторно присвойте $ обратно script.aculo.us.

Как я могу назначить $ для jQuery таким образом, чтобы позже загруженная библиотека script.aculo.us не конфликтовала? Я уже попробовал следующее без какого-либо успеха (следующий код заставляет скрипт script.aculo.us работать, но jQuery не работает):

jQuery(document).ready(function () {

    //#nav-main dropdown effects

    jQuery('#nav-main ul li').hoverIntent(function () {
        jQuery(this).find('.dropdown').stop(true,true).slideDown('900'); },
            function(){
                jQuery(this).find('.dropdown').stop(true,true).slideUp('500');
        });
}); // end document.ready

EDIT

Вывод консоли отладки для приведенного выше кода:

Uncaught TypeError: Object #<HTMLDocument> has no method 'ready' (anonymous function), так что document.ready терпит неудачу, потому что он назначен jQuery, который как-то не загружается должным образом ...

РЕДАКТИРОВАТЬ 2

Оба из 2 (на момент данного обновления) ответов, опубликованных ниже, ничего не делают для решения проблемы, с которой я борюсь. Возможно, они технически правильны, но они не решают мою проблему.

Ответы [ 4 ]

2 голосов
/ 28 января 2013

Это сработало для меня, так что у меня могут быть совместимы jQuery и script.aculo.us / Prototype. Кредит на код невозможен для этого спасателя!

Вместо:

jQuery(document).ready(function () {

    // Code to run on DOM ready

}); // End document.ready

Попробуйте это:

( function($) {

    // Code to run on DOM ready

} )( jQuery ); // End document.ready
1 голос
/ 15 декабря 2011

Я нашел решение ОЧЕНЬ удивительным!

Во-первых, использование режима $j = jQuery.noConflict(); не сработало.

Во-вторых, вызов jQuery.noConflict(); в голову не работал.

Метод, который действительно работал, был таким: http://codeimpossible.com/2010/01/13/solving-document-ready-is-not-a-function-and-other-problems/

Как ни странно, плагин Coda Slider 2.0 автоматически не делает noConflict, поэтому оказалось, что В дополнение к проблемам, перечисленным выше, мне нужно было также обернуть этот плагин в .noConflict();.Выкрикивайте автора сообщения в блоге, не уверен, почему другие методы вызова noConflict(); не работают, но я рад, что нашел сообщение.

0 голосов
/ 15 декабря 2011

Попробуйте это:

<script src="url to jquery"></script>
<script type="javascript">jQuery.noConflict();</script>
<script src="url to scriptaculous"></script>
0 голосов
/ 15 декабря 2011

Назначение jQuery обратно $ ничего не делает.

Либо назначьте jQuery другой переменной:

var j$ = jQuery.noConflict();

Или не назначайте ничего:

jQuery.noConflict();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...