Ответы пользователя по тегу JavaScript
  • Как сделать так чтобы инпут password всегда показывал фиксированное количество звездочек, вне зависимости от длины введенного пароля?

    @zxf
    Классическим способом никак. Но можно сделать «фиктивное» поле для пароля, используя label, стилизовать его так, как вы хотите и привязать к невидимому input’у.
    По клику на фиктивное поле input получает фокус и дальше пользователь вводит данные, которые идут в невидимый инпут.
    Ответ написан
    Комментировать
  • Что поменять в скрипте блока, чтобы он закрывался при нажатии на body, а не id dropdownButton?

    @zxf
    Повесьте слушатель события клика на body, а не на e, а внутри функции обработчика добавьте условие if (…) в котором проверяйте, если нажат нужный вам элемент / нужный мне элемент не нажат -> удалить data-show.
    Условия внутри if могут оказаться весьма объемными в данной задаче, это нормально.

    И да, чтобы получить доступ к элементу, взывавшему событие сделайте внутри функции обработчика t.target.

    А ещё, аргумент функции обработчика, обычно, называют не t, а e, evt или event. Это для читаемости.
    Ответ написан
    Комментировать
  • Как скрыть свой домен от IFRAME?

    @zxf
    Посмотрите на атрибут тега iframe referrerpolicy

    Вам нужно установить его в значение no-referrer
    Ответ написан
  • Как добавить Product4 и Product5 в скрипт?

    @zxf
    Копируете в HTML любой div слайдера (div.product1, например), вставляете его после div.product3 и меняете у него класс на .product4

    Далее делаете проверку в JS:
    else if (count === 4) { логика из предыдущего else if с заменой .product3 на .product4 и тд };


    Но, вообще-то, это динамически надо делать, а-то так у вас совсем система хардовая получится. Если эти картинки с бекенда грузить будете, то уже подобная реализация такая работать не будет.
    Ответ написан
  • Что в приоритете в реальных проектах циклы или рекурсия?

    @zxf
    Однозначно циклы. Рекурсия сложнее читается и работает дольше.

    Но это в приоритете, а бывают задачи, когда рекурсия очень сильно сокращает объём кода. Тогда, взвесив все «за» и «против» можно выбирать рекурсивный подход.

    Первый и один раз в жизни, однажды, успешно реализовал в +- крупном проекте рекурсивный метод и получил краткий, но поучительный фидбек, после чего успешно переделал на цикле :)
    Ответ написан
    Комментировать
  • Как передать данные в корзину в виде массива?

    @zxf
    Приветствую!

    1) любые не примитивные переменные лучше создавать через const,
    2) data атрибуты - хорошее решение для связывания каких-либо HTML элементов с их логикой JS,
    3) у Вас в коде идентификатор товара data[key].Id равняется идентификатору кнопки. А что, если у Вас на странице будет несколько категорий товаров? В категории А есть id == 1, в категории Б тоже есть товар с id == 1. При этом у каждого товара из каждой категории идентичные кнопки. Все сломается.

    Теперь насчёт реализации.

    Я бы предложил сделать каждую карточку товара блоком с data атрибутом, который полностью идентифицирует этот блок, как карточку непосредственного товара. Предположим, cakes-1 (категория товара-идентификатор товара), конкретный вариант идентификации зависит от требований. Более того, такую логику следует выполнять на уровне всего проекта или, хотя бы, конкретного модуля проекта. Тогда можно избавиться от ненужных идентификаций кнопок «+» и «-». Оставить на них только data атрибуты «plus / minus». При клике смотреть на карточку товара (она, как вы помните, один из предков родителя в DOM дереве) и брать из этой карточки data атрибут, идентифицирующий её. Расшифровывая данный атрибут можно уже идти в объект с данными и доставать оттуда необходимый Вам объект.

    Про модель. При обработке клика на + или - Вы должны пушить / попить (доставать) в/из массив(а) товары. После каждого пуша / попа Вы можете пересчитывать количество товаров в массиве и выводить это количество на экран (обновлять счётчик) ИЛИ увеличивать / уменьшать заранее созданную переменную (например, count). Второе решение быстрее, но в некоторых задачах может стать неподходящим за счёт своей «отвлеченности» от реальных данных (от вашего реального массива корзины).

    На самом деле, реализация может быть (и будет) куда сложнее, потому что здравомыслящий человек с конкретными задачами в проекте будет пытаться свести всю разработку и поддержание кода к максимально декларативному стилю. То есть, например, я хочу добавить новый элемент в массив кнопок навигации и получить новую кнопку на странице во все местах, где она используется за 10 секунд, а не описывать ее HTML код в разных частях проекта. Для этого, у вас все отрисовки должны происходить на основе данных, а не на основе реализаций. То есть, если Вы захотите добавить новую кнопку список кнопок и для этого Вам достаточно будет описать ее в структуре данных для кнопок на уровне JS в соответствии с интерфейсом кнопки, значит все круто! Если же Вам приходится для добавления нового раздела описывать HTML код в пяти местах проекта, значит Ваша система будет, явно, стоить очень дорого / долго :)

    Для скорости и гибкости используются фреймворки. И тут есть даже такая шутка: «если в проекте не используется фреймворк, разработчики пишут свой».

    Успехов Вам!
    Ответ написан
    1 комментарий
  • Как название предыдущей страницы вставить в страницу прокладку?

    @zxf
    Это можно реализовать через перенаправления (redirects). Почитать о редиректах на чистом PHP можно здесь.

    Насчёт отображения. При клике на кнопку «скачать» на сервер Необходимо передавать ID скачиваемой сущности. Сделать это можно в рамках GET-запроса через передачу параметров запроса. Пример тут.

    Соответственно, на основе переданного ID тянуть необходимые данные в шаблон и возвращать страницу с нужными вам данными.

    * есть и другие решения, но это, как я вижу, самое корректное.
    Ответ написан
    Комментировать
  • Не работают скрипты которые ниже в main.js?

    @zxf
    Ошибка из-за того, что в переменной showDiscontBtn на самом деле не содержится HTML-элемент. Это проверяется через консоль или дебаггер.

    Ошибка либо в названии класса .discounts-btn__box (несоответствие класса на DOM элементе, классу в JavaScript), либо в том, что на момент получения DOM элемента в JS, этот DOM элемент ещё не был отрисован.

    Для более конкретного определения нужно больше информации о том, где и как к документу подключается скрипт и в каком производственном контексте выполняются приведённые функции.
    Ответ написан
    Комментировать