Magento jquery slider $ не определен

#jquery #jquery-ui #magento

#jquery #jquery-пользовательский интерфейс #magento

Вопрос:

Я интегрирую слайдер содержимого в тему magento, но у меня возникли некоторые проблемы с js. Я получаю сообщение об ошибке «$ не определен», затем я нашел решение с веб-сайта, в котором указано, что я должен добавить эту строку «jQuery.noConflict();» в мой файл jquery.

Затем в home.phtml, :-

 <script type="text/javascript">
var $s = jQuery.noConflict();
    $s(document).ready(function(){
        $("#featured > ul").tabs({fx:{opacity: "toggle"}}).tabs("rotate", 5000, true);
    });
</script>
  

В моем page.xml вот как я включаю js

 <action method="addJs"><script>jquery/jquery.js</script></action>
<action method="addJs"><script>jquery/jquery-ui.min.js</script></action>

<action method="addJs"><script>prototype/prototype.js</script></action> 
  

После того, как я внес вышеуказанные изменения, я получаю сообщение об ошибке «jQuery не определен»

Ценю любой совет. Заранее спасибо!

ОТРЕДАКТИРОВАНО: Эта проблема решается путем вызова js со страницы CMS-> содержимое :-

 <script type="text/javascript">// <![CDATA[
   var $j = jQuery.noConflict();  jQuery(document).ready(function($) { jQuery("#featured  ul").tabs({fx:{opacity:"toggle"}}).tabs("rotate", 5000, true); }); //  amp;>
// ]]></script>
  

На странице CMS -> Дизайн включите необходимые js-файлы :-

 <reference name="head">
  <action method="addItem"><type>skin_css</type><name>css/slider.css</name></action>
  <action method="addItem"><type>skin_js</type><name>js/jquery.min.js</name></action>
<action method="addItem"><type>skin_js</type><name>js/jquery-ui.min.js</name></action>
</reference>
  

Однако этот метод полезен, только если js используется только на определенной странице, а не на каждой странице. 🙂

Ответ №1:

На самом деле, есть лучшая альтернатива тому, что предлагает Мэтью.

Используйте замыкание, чтобы ограничить область действия $, в вашем примере вам нужно будет изменить следующий код:

 $(document).ready(function(){
    $("#featured > ul").tabs({fx:{opacity: "toggle"}}).tabs("rotate", 5000, true);
});
  

К чему-то такому, как:

 jQuery.noConflict();
(function($) {
    $(document).ready(function(){
        $("#featured > ul").tabs({fx:{opacity: "toggle"}}).tabs("rotate", 5000, true);
    });
})(jQuery);
  

Кроме того, вам нужно поместить эти вызовы addJs в reference ‘head’, чтобы поместить их в нужное место в исходном коде HTML. Скорее всего, сейчас они находятся в корневом блоке.

Комментарии:

1. Привет, Дэниел, спасибо за твой ответ. Я попробовал ваше предложение, но я все еще получаю сообщение об ошибке «jQuery не определен». Есть идеи, почему я получаю эту ошибку?

2. Привет, Дэниел, спасибо. Извините, но я не понимаю последнюю часть «вам нужно поместить эти вызовы addJs в reference ‘head’, чтобы поместить их в нужное место в исходном коде HTML. Сейчас они, вероятно, находятся в корневом блоке вместо этого.» Вы имеете в виду, что я должен поместить js в .phtml вместо этого?

3. @Sylph, нет: вы добавили эти вызовы действий addJs в page.xml но не внутри правильного блока, вам нужно поместить их в reference ‘head’.

4. Большое спасибо, Дэниел, я воспользовался другим подходом, введя из XML-файла CMS Layout Update ссылку head и скопировав js в путь к обложке. Ошибка jQuery не определена, теперь исчезла, просто слайд-шоу все еще не работает. Я попытаюсь решить это отсюда. Ценю вашу помощь! 🙂

5. Я опубликовал решение выше. Еще раз большое спасибо! 🙂

Ответ №2:

Вставьте следующий код в конце /template/page/html/head.phtml

 <script type="text/javascript">
    jQuery.noConflict();
</script>
  

Используйте jQuery вместо $ в ваших файлах скриптов.
Ваш код выглядит как

 <script type="text/javascript">    
 jQuery(document).ready(function(){
          jQuery("#featured > ul").tabs({fx:{opacity:"toggle"}}).tabs("rotate", 5000, 
 true);
      }); 
 </script>
  

jquery 1.5.2v хорошо работает с magento.

Надеюсь, это вам поможет.

Комментарии:

1. Привет, blakcaps, спасибо за ваш ответ. Я поместил этот скрипт в «header.phtml», потому что у меня нет head.phtml. Все та же ошибка, хотя «jQuery не определен». 🙁

2. Скопируйте head.phtml из базовой темы и поместите его в каталог вашей темы и попробуйте. Не добавляйте скрипт в header.phtml

3. Привет blakcaps. Большое спасибо. Я сделал это на сайте, но все та же ошибка. Похоже, что он вообще не смог получить jquery? Затем я перешел к файлу js и «alert (‘aa’)», я действительно смог получить окно предупреждения, означающее, что файл вызывается.

4. Вы добавили оповещение о том, к какому js-файлу. Вы все еще получаете ошибку «jQuery не определен»

5. да, не уверен, почему. Я воспользовался другим подходом — ввел путь из XML-файла обновления макета из CMS и скопировал файлы js в путь к обложке. Ошибка исчезла, но слайд-шоу по-прежнему не работает. Я попытаюсь решить это отсюда. Большое спасибо за вашу помощь! Действительно ценю это.

Ответ №3:

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

http://api.jquery.com/jQuery.noConflict/

В качестве альтернативы вы можете использовать плагин mXperts для выполнения задания:

http://www.magentocommerce.com/magento-connect/mxperts/extension/1619/mxperts—jquery-base

Комментарии:

1. Привет, Мэтью, спасибо за твой ответ. Я изменил экземпляры, но получаю сообщение об ошибке «jQuery не определен» : (

2. ИМХО, это трудно сделать правильно. Решение MxPerts, вероятно, является вашим лучшим способом продвижения вперед, поскольку вы можете вставлять свои скрипты в admin, и оно выполняет $ -> jQuery за вас. Вам нужно будет удалить ваши скрипты заголовка и предоставить это плагину.

3. Вызывали ли вы jQuery.noConflict()? Вы также можете попробовать сначала включить прототип.

4. Привет, Мэтью, большое спасибо за твой комментарий: D Привет, Гордон, спасибо и за твой комментарий тоже. Я пытался изменить позицию (сначала вызвать prototype, а затем jquery), но безрезультатно. Я вызвал jQuery.noConflict (), но по-прежнему получаю ту же ошибку: «jQuery не определен». Я вроде как застрял.. смехотворно >»<

5. Спасибо за ссылку Mat, но я не хочу использовать расширение для этого конкретного, потому что мне нужно будет использовать jquery как и когда, а расширение не поддерживает все функции jquery. 🙂 Удалось решить проблему. Ценю вашу помощь!

Ответ №4:

Вы можете использовать var $j = jQuery.noConflict(); . Этот код добавляется в ваш скрипт и используется $j вместо $ .