За последние 24 часа нас посетили 17472 программиста и 1712 роботов. Сейчас ищут 1548 программистов ...

Проблемы с jQ

Тема в разделе "JavaScript и AJAX", создана пользователем KirtuZ, 19 сен 2016.

Метки:
  1. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Здравствуйте.
    Небольшая предыстория:
    Решил сделать так, чтоб, на сайте, при клике на фото оно увеличивалось в том же окне.
    Здесь http://jquerytools.github.io/demos/overlay/index.html нашел как это сделать.

    Добавил в css файл соответствующий код. В хэдэре подключил библиотеку jQueryTools. Сама jQuery уже была подключена ранее.

    В футер добавил скрипт
    Код (Text):
    1.  
    2. <script>
    3.     $("img[rel]").overlay();
    4. </script>
    На главной странице получился такой код
    Код (Text):
    1.  
    2. <div id="triggers">
    3. <img src="<?php echo Product::getImage($product['id']); ?>" <?php echo Product::getRel($product['id']); ?> alt=""/>
    4. </div>
    5. <div class="simple_overlay" <?php echo Product::getMies($product['id']); ?>><!--бокс для увеличенного фото продукта-->
    6. <a class="close"></a>
    7. <!-- large image -->
    8. <img src="<?php echo Product::getImage($product['id']); ?>" alt="" />
    9. </div><!--бокс для увеличенного фото продукта-->
    Методы getRel и getMies возвращают rel="#mies" и id="mies" соответственно, с id продукта на конце.

    И всё работает! Никаких нареканий.

    Решаю осуществить тоже самое на странице товара.
    Хэдер и футер отдельными файлами и подключены ко всем страницам сайта, так что в них не лезу. Как и в scc.

    Получается такой код
    Код (Text):
    1.  
    2. <div id="triggers">
    3. <img id="largeImg" src="<?php echo Product::getImage($product['id']); ?>"
    4. <?php echo Product::getRel($product['id']); ?> alt="Фото 1" />
    5. </div>
    6. <div class="simple_overlay" <?php echo Product::getMies($product['id']); ?>>
    7. <img src="<?php echo Product::getImage($product['id']); ?>" alt="" />
    8. </div>
    Но он не работает! И я не могу найти проблему.
    Пробовал убирать id="largeImg" и делать код абсолютно идентичным, не помогает.
    Все php скрипты работают исправно.
    Пощупать странички можно тут
    http://test.lilisava.ru/ - главная.
    http://test.lilisava.ru/product/59 - страничка товара.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в глаза ничего не бросается.
     
  3. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    В том то и беда...
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дебагай через console.log()
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
  6. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Можно попробовать, но этот скрипт же от другой библиотеки зависит? Или я не правильно понимаю?
    --- Добавлено ---
    Я совсем новичок, я не знаю как это:(
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    Пробежался по мануалу особого ничего не нашел на счет функции overlay(), есть только дополнения чтобы работала данная кофеварилка.
    --- Добавлено ---
    просто код залей в новый скрипт.js и подключи, выйдет ли..
     
    KirtuZ нравится это.
  8. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Сделал. Всё по прежнему. Главная работает, страница товара - нет.
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Поищи информацию по отладке/debug, её можно и в браузере делать, например в google chrome есть инструменты разработчика.
     
  10. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Если это console в chrome, то там тишина. Я так понимаю там что-нибудь появляется только когда есть ошибка?
    --- Добавлено ---
    Там есть одинаковая ошибка при загрузке обеих страниц, так что вряд ли дело в ней. Говорит что overlay not a function. После этого молчит.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а ты сам должен везде по своему коду распихать console.log('dfdff');. Но я хочу скзать, что в браузере есть норм отладка с брейкпоинтами. Ты почитай.
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ты сам можешь там проследить за ходом всей программы, чтобы убедиться, что всё работает как надо или найти место где что-то сломалось
     
    KirtuZ нравится это.
  13. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Ок. Спасибо. Пошел читать.
     
  14. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    И так, дебагер ведет себя идентично на обеих страницах.
    Console выдает сначала
    Uncaught TypeError: $(...).overlay is not a function
    Потом
    Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
    И в конце
    XMLHttpRequest cannot load http://cdn.jquerytools.org/1.2.6/full/jquery.tools.min.js. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

    Но выдает все это на обеих страницах, значит дело не в этом?
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Возможно и так
     
    KirtuZ нравится это.
  16. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Попробовал подключить это дело на самую простую страницу сайта. На ней кроме слайдера с фотками вообще толком ничего нет. И опять не получается... Что-то мной упущено из виду, но я не могу понять что...
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Отладка упущена, надо проследить за ходом программы, но тут нужно понимать что хочешь и как всё работает.
    Можешь сделать живой пример, возможно кто-то посмотрит в чём причина, ты по какой книге HTML и JavaScript изучаешь?
     
    KirtuZ нравится это.
  18. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Беда наверно как раз в том что JavaScript толком не изучен. Я читал http://anton.shevchuk.name/jquery-book/ и http://learn.javascript.ru/javascript-specials но даже не пытался писать скрипты самостоятельно. Поэтому и нашел готовый. И ладно бы его просто не получилось применить к сайту, так получилось же...
    --- Добавлено ---
    С HTML дело давно было, уже и не помню что читал. Освежал в памяти тут http://www.zvirec.com/html_sod.php и на http://htmlbook.ru/
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    console.log распихай во все места и узнаешь
     
    KirtuZ и denis01 нравится это.
  20. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Нашел в чем был косяк! Оказывается когда я настраивал скрипт на главной странице, он отказывался работать из внешнего файла и я прописал его прямо в том же файле, а потом еще и в footer. Теперь если я вставляю скрипт в файл страницы товара он работает.

    Вопрос 1:
    Почему скрипт не работает из внешнего файла?

    Вопрос 2:
    На странице товара, в случае если у товара две фотки, то под большим фото появляются миниатюрки, при клике на которые основное фото переключается. за это отвечает такой вот скрипт
    Код (Javascript):
    1. $(document).ready(function(){
    2.  
    3.     $(".thumbs a").click(function(){
    4.  
    5.         var largePath = $(this).attr("href");
    6.                   var largeAlt = $(this).attr("title");
    7.  
    8.         $("#largeImg").attr({ src: largePath, rel: largeAlt });
    9.         return false;
    10.     });
    11. });
    Я его немного изменил чтобы помимо адреса картинки он менял и атрибут rel.
    И он меняет.

    В итоге код вот такой
    HTML:
    1.  
    2. <div id="triggers">
    3. <img id="largeImg" src="<?php echo Product::getImage($product['id']); ?>" rel="#mies1"/>
    4. </div>
    5. <div class="simple_overlay" id="mies1">
    6. <img src="<?php echo Product::getImage($product['id']); ?>" alt="" />
    7. </div>
    8. <div class="simple_overlay" id="mies2">
    9. <img src="<?php echo Product::getSecondImage($product['id']); ?>" alt="" />
    10. </div>
    11. </div>
    12. <p class="thumbs">
    13. <a href="<?php echo Product::getImage($product['id']); ?>" title="#mies1">
    14. <img src="<?php echo Product::getImageThumb($product['id']); ?>">
    15. </a>
    16. <a href="<?php echo Product::getSecondImage($product['id']) ;?>" title="#mies2">
    17. <img src="<?php echo Product::getSecondImageThumb($product['id']) ;?>">
    18. </a>
    19. </p>
    20.  
    Основное фото переключается, атрибут rel меняется с "#mies1" на "#mies2", и по логике увеличиваться должно уже второе фото. Но нет, все равно увеличивается первое. Это как то можно исправить?
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тебе надо освоить отладку. Возможно ты прописал его относительным путём. и он не грузится. Открываешь вкладку запросов и видишь, что часть запросов на файлы страницы обломилась - идёшь выяснять.

    если скрипт стоит ДО jquery - от не отработает, и ругнётся в консоль. Возможно у тебя где-то опечатка в селекторе, и он не видит элемента.

    Короче надо дебагать.
    надо дебагать. На вид оно должно работать как задумано.
     
  22. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Может быть посоветуете какой-нибудь ресурс? По отладке везде все очень поверхностно написано, мол тыкай Ctrl+Shift+I и дебагай. А подробностей ни каких...
    --- Добавлено ---
    Если убрать вызов из текущего файла и подключить из внешнего, то перестает работать и ругается в консоль, все как вы говорите.
    Пишет Uncaught TypeError: $(...).overlay is not a function
    И мне кажется странным что ссылается он при этом не на overlay.js которым я подключаю скрипт а на jquery.js
    Вот еще: если я убираю из overlay.js обрамление в виде $(document).ready(function... то ошибка та же но ссылается уже на overlay.js
     
    #22 KirtuZ, 22 сен 2016
    Последнее редактирование: 22 сен 2016
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты попробуй, тыкни и подебагай минут двадцать.
     
  24. KirtuZ

    KirtuZ Новичок

    С нами с:
    19 сен 2016
    Сообщения:
    31
    Симпатии:
    2
    Я в общем то так и делаю. Но не знаю что делать с ошибкой. Ну вижу я ее в консоле, и что?
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну ты написал строку
    она не пашет
    почему?
    пишет - нет такого метода у этого объекта
    почему?
    надо сделать консоль.лог объекта, и выяснить, что там сидит

    Это если ты уверен, что там оно должно быть.

    Если ты не уверен, что он там должен быть, то выясни, должен ли. С чего ты решил, что он там должен быть?