jquery noConflict проблема - PullRequest
       24

jquery noConflict проблема

0 голосов
/ 26 января 2012

Я пытаюсь использовать плагин Lightbox , но с jquery есть конфликт, я просмотрел некоторые статьи и нашел способ обойти это, но мне не повезло в его реализации.

Вот мой код: Ссылки:

<link href="Lightbox/css/lightbox.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="Lightbox/js/prototype.js"></script>
<script type="text/javascript" src="Lightbox/js/scriptaculous.js?load=effects,builder">    </script>
<script type="text/javascript" src="Lightbox/js/lightbox.js"></script>

Сценарий:

<script type="text/javascript">
    jQuery.noConflict();
    (function ($) {
        $(document).ready(function () {
            $("a[rel=lightbox[group1]]").live("click", function () {
                $("a[rel^='lightbox[group1]']").lightbox();
                return false;
            });
        });
    })(jQuery);
</script>

Любая помощь будет принята с благодарностью!

Я использую версию jquery 1.5.2

Ответы [ 3 ]

1 голос
/ 26 января 2012

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

Вы не показываете, как вы включаете jQuery.Вот пример прямо со страницы jQuery doc для .noConflcit():

<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.noConflict();
  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ can follow here.
  });
  // Code that uses other library's $ can follow here.
</script>

В вашем случае, я думаю, ваш код будет выглядеть следующим образом:

<link href="Lightbox/css/lightbox.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="Lightbox/js/prototype.js"></script>
<script type="text/javascript" src="Lightbox/js/scriptaculous.js?load=effects,builder">    </script>
<script type="text/javascript" src="Lightbox/js/lightbox.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
    jQuery.noConflict();
    (function ($) {
        $(document).ready(function () {
            $("a[rel=lightbox[group1]]").live("click", function () {
                $("a[rel^='lightbox[group1]']").lightbox();
                return false;
            });
        });
        // other jQuery code that uses $ can go here
    })(jQuery);
    // other jQuery code that uses jQuery (but not $) can go here or in other script tags
</script>

Порядок включения js-файлов в связи с вызовом jQuery.noConflict() критически важен.

0 голосов
/ 26 января 2012

Вы можете попробовать использовать объект jQuery вместо $:

<script type="text/javascript">
    jQuery(document).ready(function () {
        jQuery("a[rel=lightbox[group1]]").live("click", function () {
            jQuery("a[rel^='lightbox[group1]']").lightbox();
            return false;
            });
    });
</script>
0 голосов
/ 26 января 2012

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

Если у вас есть сценарий jQuery в заголовке вашего сайта, вам нужно проверить сетевую консоль FireBug, чтобы увидеть, загружен ли он - в Google Chrome также есть хороший сетевой монитор, который вы можете использовать.

Вы также можете использовать лайтбокс jQuery вместо представления библиотеки прототипов только для использования одного плагина.

...