#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
вместо $
.