JQuery - проблема noConflict()

У меня проблема, возможно, с тем, как я пытаюсь это сделать.

Либо ползунок будет работать. или изображения заменят текст. но не оба.

Я должен иметь этот файл "scrollbox.min.js", связанный для работы слайдера. поэтому я использую noConflict.

Я хочу, чтобы нижеприведенный фрагмент использовал файл scrollbox.min.js:

<script>
  jQuery().noConflict();
  jQuery(function($) {
        $(document).ready(function() {
          jQuery('#scrool').scrollbox({
            direction: 'h',
            switchItems: 3,
            distance: 540,
            autoPlay: false
          });
          jQuery('#scrool-backward').click(function() {
            jQuery('#scrool').trigger('backward');
          });
          jQuery('#scrool-forward').click(function() {
            jQuery('#scrool').trigger('forward');
          });
        })
      }
</script>

и я хочу, чтобы остальные использовали сайт jQuery.

Что-то, что я заметил:

В зависимости от того, где я размещаю jQuery(). noConflict(); он позволяет выполнять различные разделы кода. Мне нужно, чтобы оба работали:

введите описание изображения здесь

введите описание изображения здесь

Пожалуйста, см. ниже полную часть script:

<script src="http://www.qwerty.com/assets/xjs/jquery.scrollbox.min.js"></script>
<script>
  jQuery().noConflict();
  jQuery(function($) {
    $(document).ready(function() {
      jQuery('#scrool').scrollbox({
        direction: 'h',
        switchItems: 3,
        distance: 540,
        autoPlay: false
      });
      jQuery('#scrool-backward').click(function() {
        jQuery('#scrool').trigger('backward');
      });
      jQuery('#scrool-forward').click(function() {
        jQuery('#scrool').trigger('forward');
      });
    });
  });

</script>

<script>
  jQuery(function($) {
    $(document).ready(function() {

      jQuery('.starIMGrating').each(function(i, obj) {

        var myString = jQuery(this).html()

        if (myString > "5") {
          var myString = "5"
        } else {}

        /* alert(myString); */
        myRegexp3 = /\d/;
        var match = myRegexp3.exec(myString);

        var myRegexp2 = /\d\.(\d)/;
        var matchstring = myString;
        var m;

        if (myString.indexOf(".") == -1) {
          var match2 = 0;
        } else if (myString.indexOf(".") == 1) {
          var m = myRegexp2.exec(matchstring)
          var match2 = m[1];
        }

        starIMG = "<img src='http://qwerty/" + match + "_" + match2 + "/5/rating.gif' alt='' style='width:70px !important;' />";

        /*alert(match2); */
        jQuery(this).html(starIMG);
        /* alert(starIMG); */
      });

    });
  });

</script>

Ответ 1

Вызов jQuery().noConflict(); вызовет ошибку:

Uncaught TypeError: jQuery (...). noConflict не является функцией

Что, если не внутри блока try { ... }, приведет к тому, что остальная часть этого script не будет выполнена вообще.

noConflict является частью основного объекта пространства имен jQuery, но не отдельных объектов jQuery, поэтому вы должны удалить скобки из jQuery():

jQuery.noConflict();

Смотрите это для получения дополнительной информации: http://learn.jquery.com/using-jquery-core/dollar-object-vs-function/

Ответ 2

Как уже упоминалось, вам нужно использовать jQuery.noConflict(), но всякий раз, когда вы отлаживаете что-то подобное, вы хотите свести к минимуму все движущиеся части. То, что я расскажу ниже, вряд ли вызовет у вас какие-либо проблемы, но в нем подчеркивается очень вопиющее злоупотребление jQuery, и вы должны попробовать и следовать. У вас есть следующий код:

jQuery(function ($) {
  $(document).ready(function(){
    ...
  });
});

Это эквивалентно написанию следующего:

jQuery(document).ready(function ($) {
  $(document).ready(function(){
    ...
  });
});

Вы видите двуличие? Позвольте мне объяснить:

  • Следующие две строки идентичны:

    $(function() { /* execute code */ });
    $(document).ready(function () { /* execute code */ });
    

    Поэтому, когда вы помещаете один из них внутри другого, как вы это делали, вы по существу говорите: "Подождите, пока документ будет готов, а затем подождите, пока документ не будет готов снова, а затем выполните код". Это лишний и ненужный.

  • Всякий раз, когда вы используете любой из вышеперечисленных "готовых документов", вы можете дать jQuery другое имя для использования в функции обратного вызова. Например, мы могли бы переименовать jQuery в fOobar, если хотим:

    $(function(fOobar) {
        fOobar('#scroll').trigger('forward');
    });
    
  • Приведенный выше метод особенно полезен при использовании noConflict(). Никто не любит набирать jQuery, потому что знак $ доллара намного проще. Но noConflict() означает, что вы не можете использовать знак доллара. Чтобы исправить это, мы можем переименовать jQuery обратно в знак доллара, не затрагивая другой код на странице:

    jQuery.noConflict();
    jQuery(function ($) {
      // you can safely use the dollar sign variable inside this function
      // instead of the cumbersome `jQuery` variable.
    });
    
  • Наконец, каждый раз, когда вы передаете селектор jQuery, он должен много работать, чтобы найти этот элемент на странице. Чтобы JQuery слишком устал, мы можем сохранить (или кеш) работу, которую JQuery выполнил и повторно ее использовал. Вот как выглядел бы ваш код, если бы вы кэшировали элемент #scroll:

    jQuery.noConflict();
    jQuery(function ($) {
      // get the #scroll element once and reuse it
      var $scroller = $('#scroll');
      $scroller.scrollbox({
        direction: 'h',
        switchItems: 3,
        distance: 540,
        autoPlay: false
      });
      $('#scrool-backward').click(function() {
        $scroller.trigger('backward');
      });
      $('#scrool-forward').click(function() {
        $scroller.trigger('forward');
      });
    });
    

Ответ 3

Смотрите: jQuery.noConflict().

Вы получите следующее:

jQuery.noConflict();
(function($) {
  $(document).ready(function() {
    $('#scrool').scrollbox({
      direction: 'h',
      switchItems: 3,
      distance: 540,
      autoPlay: false
    });
    $('#scrool-backward').click(function() {
      $('#scrool').trigger('backward');
    });
    $('#scrool-forward').click(function() {
      $('#scrool').trigger('forward');
    });
  });
}(jQuery);

Ответ 4

Здесь в основном у вас есть два экземпляра библиотеки jquery (файл библиотеки jquery добавляется дважды на страницу), поэтому гораздо проще было бы иметь только один экземпляр библиотеки jquery, поэтому, если бы вы могли каким-то образом добавить один например, тогда вам будет легко, мне любопытно узнать, почему это невозможно.

С другой стороны, если вы не можете удалить лишний экземпляр jQuery, то вы можете сделать одно, сохранить последний экземпляр jquery в переменной страницы, а затем не называть конфликт. например.

var $$ = $;
jQuery.noConflict();
$$('#scroll').scrollbox({})

поэтому вы можете использовать scrollbox с $$, т.е. $$ ('# scroll'). scrollbox ({}) и другие вещи с одиночным $

Ответ 5

Если вы используете CDN, пожалуйста, убедитесь, что вы подключены к Интернету. Потому что сейчас у меня такая же проблема. Затем я захожу в Google, чтобы найти решение, и я подключаю свой ноутбук к Интернету, и все начинает работать как раньше.