JQuery / прототип конфликта - PullRequest
10 голосов
/ 27 июня 2010

Я использую сценарий jQuery hoverIntent.js для системы мега выпадающего меню, вдохновленной мега выпадающим меню Сона Тонаки, с CSS & jQuery sohtanaka.com/web-design/mega-drop-downs-w-css-jquery , Моя страница содержит скрипт prototype.js, который вставляется сторонним поставщиком (это веб-сайт по недвижимости, который загружает информацию о поиске недвижимости и информацию об управлении потенциальными клиентами). Он загружается последним непосредственно перед тегом. Мой скрипт меню и вызовы jQuery загружаются вверху тега. Ниже я включил 2 ссылки. Первой ссылкой я закомментировал вызов prototype.js и меню работает нормально. Вторая ссылка имеет вызов файла prototype.js, и раскрывающийся список не работает.

  1. Рабочий выпадающий список: http://www.myreoforeclosures.com/_menutestfromcode.html (закомментирован prototype.js)

  2. Не работает выпадающий список: http://www.myreoforeclosures.com/_menutestfromcode2.html (с работающим prototype.js)

Я пробовал много вариантов разрешений jQuery noConflict (), предложенных на веб-сайте jQuery, но я не могу разрешить конфликт. Я сократил приведенные выше ссылки только до основ CSS и HTML, чтобы проверить выпадающий список.

Обратите внимание, что я поднимаюсь по крутой кривой обучения с помощью Web 2.0 / CSS / jQuery, так как это моя первая попытка создания веб-сайта с использованием этих инструментов (по сравнению с веб-сайтами на основе таблиц ранее).

Буду очень признателен за любую помощь для совместной работы jQuery и прототипа. У меня есть только контроль над сценарием jQuery, поэтому любое разрешение должно быть сделано для jQuery. У меня нет никакого контроля над prototype.js.

Ответы [ 6 ]

3 голосов
/ 27 июня 2010

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

Если у вас есть код, который ожидает, что $ будет означать «jQuery», то его нужно изменить, чтобы использовать jQuery. В противном случае он подберет прототип $, что, конечно, совсем другое дело.

изменить & mdash; Хорошо, я наконец загрузил вашу страницу (я думаю, что в моей сети были проблемы), поэтому я вижу, что вы используете "$ j" довольно последовательно. Таким образом, я не думаю, что проблема $ в коде меню является проблемой, но я оставлю здесь комментарий, потому что все еще верно, что noConflict() не волшебство.

изменить еще раз & mdash; Я бы согласился с предложением Патрика попробовать Prototype 1.4.2.

1 голос
/ 13 июля 2011

У меня была точно такая же проблема! Я использую Jq 1.6.2 и prototype.js с 'RangeError: Неверная длина массива'.

Я почти сдался, пока не использовал копию прототипа Google CDN, и все хорошо. Я предполагаю, что ошибка, которая была проблемой, была решена.

1 голос
/ 27 июня 2010

Я вижу, что вы используете более старую версию jQuery. У вас 1.3.2 вместо 1.4.2.

Не уверен, что это будет иметь значение, но, возможно, попробуйте последний выпуск.

Вы можете связаться с ним напрямую из CDN Google:

http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js

0 голосов
/ 27 июня 2010

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

(function ($) {
   // do stuff as usual
})(jQuery);
0 голосов
/ 27 июня 2010

Мне кажется, что меню работает на обоих URL.(Firefox 3.6.4)

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

/ headdesk

0 голосов
/ 27 июня 2010
...