Подтвердить что ты не робот

Конфликт jQuery и Prototype

Я использую плагин jQuery AutoComplete на странице html, где у меня также есть меню аккордеона, в котором используется прототип.

Они работают отлично по отдельности, но когда я пытался реализовать оба компонента на одной странице, я получаю сообщение об ошибке, которое я не смог понять.

исключение uncaught: [Исключение... "Возвращенный код отказа компонента: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" местоположение: "JS frame:: file:///C:/Documents and Настройки/Администратор/Рабочий стол/веб-сайт/js/jquery-1.2.6.pack.js:: anonymous:: строка 11" data: no]

Я обнаружил, что файл, конфликтующий с jQuery, является "effects.js", который используется в меню аккордеона. Я попытался заменить этот файл более новой версией, но новичок, похоже, нарушил поведение аккордеона.

Моя догадка заключается в том, что файл "effects.js", используемый в аккордеоне, был изменен для получения демонстрационного выхода аккордеона. Я также попытался использовать переопределяющие методы jQuery, чтобы избежать конфликтов с другими библиотеками, и это не сработало.

Я получил аккордеонную демонстрацию от stickmanlabs.com.

И автозаполнение jQuery можно получить из сайта jQuery.

Кто-нибудь еще испытал эту проблему?

4b9b3361

Ответ 1

Существует два возможных решения: возник конфликт с более старой версией Scriptaculous и jQuery (Scriptaculous пытался неправильно протолкнуть собственный прототип Array) - сначала попробуйте обновить свою копию Scriptaculous.

Если это не сработает, вам нужно будет использовать noConflict() (как указано выше). Однако есть улов. Поскольку вы включаете плагин, вам нужно будет делать включения в определенном порядке, например:

<script src="jquery.js"></script>
<script src="jquery.autocomplete.js"></script>
<script>
  jQuery.noConflict();
  jQuery(document).ready(function($){
    $("#example").autocomplete(options);
  });
</script>
<script src="prototype.js"></script>
<script src="effects.js"></script>
<script src="accordion.js"></script>

Надеюсь, это поможет прояснить ситуацию.

Ответ 3

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

Вы можете использовать Prototype (ну, Scriptaculous) на самом деле) Ajax.Autocompleter и ditch jQuery, или вы можете использовать jQuery Accordion и избавиться от прототипа.

Использование обеих библиотек сразу не очень хорошая идея, потому что:

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