Конфликт 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, и все хорошо. Я полагаю, что проблема, которая была сейчас проблемой, была решена.

Ответ 5

Меню, похоже, работает для меня по обоим URL-адресам. (Firefox 3.6.4)

Изменить: они, похоже, работают для меня, потому что моим предпочтительным браузером является Firefox с NoScript. Я не заметил, что библиотека прототипов появилась из другого домена. =/

/headdesk

Ответ 6

Если это меню не использует прототип, вы можете переопределить переменную $ в jQuery в новом блоке (через самозапускающуюся анонимную функцию).

(function ($) {
   // do stuff as usual
})(jQuery);