Конфликт jQuery/прототипа
Я использую jQuery hoverIntent.js script для мега-выпадающего меню, вдохновленного Son Thonaka mega drop down w/CSS и jQuery sohtanaka.com/web-design/mega-drop-downs-w-css -jquery. Моя страница включает prototype.js script, который вставлен сторонним поставщиком (это веб-сайт недвижимости, который загружает контент поиска и ведет контент управления). Он загружает последнюю перед тегом. Мое меню script и вызовы jQuery загружаются в верхней части тега. Ниже я включил 2 ссылки. В первой ссылке я прокомментировал вызов prototype.js, и меню прекрасно работает. Вторая ссылка имеет вызов prototype.js, и выпадающее меню не работает.
Я пробовал много вариантов разрешений jQuery noConflict(), предложенных на веб-сайте jQuery, но для жизни я не могу решить конфликт. Я привел приведенные выше ссылки только к основам CSS и HTML, чтобы проверить падение.
Обратите внимание, что я поднимаюсь по крутой кривой обучения с помощью Web 2.0/CSS/jQuery, так как это моя первая попытка создания веб-сайта с использованием этих инструментов (ранее на основе веб-сайтов).
Приветствуется всяческая помощь, чтобы заставить jQuery и прототип работать вместе. Я только управляю jQuery script, поэтому любое разрешение должно быть выполнено для jQuery. Я не имею никакого контроля над prototype.js.
Ответы
Ответ 1
Я подозреваю, что причина jQuery.noConflict()
не работает, так это то, что код меню продолжает использовать $
для ссылки на функциональность jQuery. Все, что noConflict()
делает, это отвязать глобальное имя $
от jQuery
.
Если у вас есть код, который ожидает, что $
означает "jQuery", тогда его нужно изменить, чтобы вместо него использовать jQuery
. В противном случае он подберет прототип $
, который, конечно, совсем другой.
edit — ok Я, наконец, получил вашу страницу для загрузки (я думаю, что у моей сети были проблемы), поэтому я вижу, что вы используете "$ j" довольно последовательно. Таким образом, я не думаю, что проблема с $
в коде меню является проблемой, но я оставлю комментарий здесь, потому что все еще верно, что noConflict()
не является магическим.
изменить снова — Я бы пошел с предложением Патрика попробовать Prototype 1.4.2.
Ответ 2
Я вижу, что вы используете более старую версию jQuery. У вас есть 1.3.2 вместо 1.4.2.
Не уверен, изменит ли это, но, возможно, попробует последнюю версию.
Вы можете напрямую связать его с Google CDN:
http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
Ответ 3
У меня была такая же проблема! Я использую Jq 1.6.2 и prototype.js с "RangeError: Недопустимая длина массива".
Я почти сдался, пока не использовал копию прототипа Google CDN, и все хорошо. Я полагаю, что проблема, которая была сейчас проблемой, была решена.
Ответ 4
http://docs.jquery.com/Using_jQuery_with_Other_Libraries
Используйте метод jQuery.noConflict().
Grz, Kris.
Ответ 5
Меню, похоже, работает для меня по обоим URL-адресам. (Firefox 3.6.4)
Изменить: они, похоже, работают для меня, потому что моим предпочтительным браузером является Firefox с NoScript. Я не заметил, что библиотека прототипов появилась из другого домена. =/
/headdesk
Ответ 6
Если это меню не использует прототип, вы можете переопределить переменную $
в jQuery в новом блоке (через самозапускающуюся анонимную функцию).
(function ($) {
// do stuff as usual
})(jQuery);