• Клики по динамически созданным кнопкам в форме ajax?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    делегирование.
    +$(".form-submit").on("click", ".product__add", function () {
    -$(".product__add").on("click", function () {
    Ответ написан
    Комментировать
  • Как добавить класс js?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Используйте всплытие событий. Вешайте обработчик на постоянно присутствующий родительский элемент.
    Ответ написан
    2 комментария
  • Почему выводится текст вместо QR кода?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    Ничего не понял из того на чем вы это делаете, но
    qr('{$product.name')}
    скобка - апостроф - фигурная
    а справа идут не в обратном порядке
    Ответ написан
    Комментировать
  • Open Server работает очень медленно, как ускорить его работу?

    skapunker
    @skapunker
    Умный
    Столкнулся с такой же проблемой. Решил так: в настройках движка сайта в конфиге для подключения к БД вместо localhost написал 127.0.0.1 и все стало норм.
    Ответ написан
    9 комментариев
  • Как практиковаться в программировании?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Забей на программирование, это не твое.

    Если тебе не интересно работать в консоли, неинтересно с формочками, то может быть, сильно настучав себе на голове ты это и сможешь осилить, и может быть даже сможешь осилить интервью и трудоустройство. Но на работе все равно быстро перегоришь и будешь жить несчастную жизнь.

    Найди ту деятельность, где у тебя глаза горят.
    Ответ написан
    4 комментария
  • Как называют "сервисный сбор" в корзине?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Упаковка/сборка заказа, можно даже сделать ее бесплатной от какой-то суммы.
    Ответ написан
    1 комментарий
  • Как правильно переписать css в scss с нестингом?

    @its2easyy
    .project-details__container.project-details__container__loaded {}
    .project-details__cover.project-details__cover_loaded {}

    =>
    .project-details{
      $this: &;
      &__container{
         &#{$this}__container__loaded{
    
        }
      &__cover{
           &#{$this}__cover_loaded{
    
           }
        }
      }

    Но вообще тут что то не то со специфичностью, по нормальному это должно было бы быть как-то так
    .project-details {
      &__container{
         &__loaded{
        }
      }
    }
    Ответ написан
    Комментировать
  • К какому шаблону относится оформление свойств через нижнее подчеркивание?

    meusov11
    @meusov11
    По сути никакому.

    Использование нижнего подчеркивания перед именем переменной, такого как наприме р this._data, является соглашением в некоторых языках программирования, включая JavaScript. Это не является частью синтаксиса языка или специальной функциональностью, а скорее соглашением об именовании, указывающим на то, что переменная является "приватной" или "внутренней" для твоего класса

    В js вообще нет строгой приватности для переменных или свойств классов. Все свойства и методы класса по умолчанию доступны извне объекта. Использование символа _ перед именем переменной или свойства служит как некий сигнал или подсказка для других разработчиков о том, что эта переменная или свойство предназначены для внутреннего использования и не следует напрямую обращаться к ним извне класса.

    Таким образом, this._data в вашем примере указывает на то, что _data предполагается использовать только внутри класса User. Если бы использовалось this.data без символа _, это могло бы дать впечатление, что свойство data предназначено для публичного доступа извне класса.

    Еще разрабы документируют такие соглашения и указывают на то, что свойства или методы с символом _ перед именем предназначены для внутреннего использования. Это может быть указано в комментариях или в документации класса.
    Ответ написан
    8 комментариев
  • Зачем нужны объявления типов php?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Постараюсь объяснить на анти-примере.
    Ну вот допустим пришли вы на новое место работы, в котором какое-то время делают какой-то проект.
    Вам дают задачу вывести на фронт ранг пользователя.
    Вася Пупкин говорит, что уже написал метод для получения ранга пользователя - getUserRank и вам нужно просто использовать его. Вроде все хорошо, но вы открываете исходники и видите вот такую картину:
    (примеры абстрактные, написанные на коленке)
    class UserUtils {
       public function getUserRank($user) {
          // 20-30 строк кода
       }
    }

    Смотрите вы на этот метод и думаете:
    Что такое $user? Это строка с логином? Это id-шник? Это объект ORM?

    А что возвращает метод? Число? Объект ORM?

    И вместо-того, чтобы приступить непосредственно к реализации задачи, вы сидите и читаете Васин код, чтобы понять, что надо передавать.
    А если бы метод выглядел примерно так:
    class UserUtilsWithTypes {
       public function getUserRank(UserModel $user) : int {
          // code
    
       }
    }

    То вы бы сразу поняли, что $user это объект ORM, а метод возвращает метод число.
    Да, стоит добавить, что помимо объявления типа следует и имя аргумента указывать соответствующее его типу (например для bool часто вижу имена вроде $is_[что-то]), но речь сейчас не об этом.
    Ответ написан
    5 комментариев
  • Возможно ли создать скрип, который после бронирования клиентом будет отписывать ему в telegram(WP)?

    vitaly_74
    @vitaly_74
    Возможно? -да. А что с остальным делать не знаю. Наверное стоит обратиться на биржу фриланса.
    Ответ написан
    2 комментария
  • Почему синхронный код в JS потребляет больше памяти?

    Fragster
    @Fragster
    помогло? отметь решением!
    await - это не "синхронно". Это синтаксический сахар. Соответственно, "внутри" всё то же самое, те же промисы и коллбэки. Скорее всего кушать память стало из-за кривого переписывания.
    Ответ написан
    Комментировать
  • Почему не работает ховер для body?

    @smigles
    Селектор A + B применяет стили к B, который находится на том же уровне сразу после A, а у вас B является родителем A.
    Ответ написан
    Комментировать
  • Где можно применить оператор нулевого слияния?

    @entermix
    Это синтаксический сахар

    let user;
    alert(user ?? "Аноним"); // Аноним (user не существует)


    let user = "Иван";
    alert(user ?? "Аноним"); // Иван (user существует)


    let firstName = null;
    let lastName = null;
    let nickName = "Суперкодер";

    // показывает первое значение, которое определено:
    alert(firstName ?? lastName ?? nickName ?? "Аноним"); // Суперкодер


    https://learn.javascript.ru/nullish-coalescing-operator
    Ответ написан
    Комментировать
  • Интересная задача на js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Решение не верно, т.к. расчитывает только на эти 4 имени. Что, если там будут другие?

    Алгоритм:
    1. составить объект, где ключи – имена, а значения – счётчики, сколько раз имя встретилось.
    2. после полного подсчёта, найти максимум и минимум счётчиков.
    3. собрать имена, у которых счётчик равен максимуму или минимуму. Каждого, теоретически, может оказаться больше одно, поэтому – в массивы имён.
    4. пройти по всем ключам объекта со счётчиками, и исключить имена, которые есть среди макс и мин. – останутся «остальные».


    spoiler
    const mostLeastAndTheRest = names => {
      const dict = names.reduce((acc, name) => ((acc[name] ??= 0), acc[name]++, acc), {});
      // { "Женя": 3, "Иван": 1, "Виктор": 4, "Константин": 1 }
    
      const values = Object.values(dict);
      const max = Math.max(...values);
      const min = Math.min(...values);
    
      const entries = Object.entries(dict);
      const winners = entries.filter(([_, value]) => value === max).map(([key, _]) => key);
      const losers = entries.filter(([_, value]) => value === min).map(([key, _]) => key);
      const rest = Object.keys(dict).filter(name => !winners.includes(name) && !losers.includes(name));
      return { winners, losers, rest };
    };
    
    mostLeastAndTheRest(['Женя', 'Женя', 'Иван', 'Женя', 'Виктор', 'Виктор', 'Константин', 'Виктор', 'Виктор']);
    /*
    {
      "winners": [ "Виктор" ],
      "losers": [ "Иван", "Константин" ],
      "rest": [ "Женя" ]
    }
    */


    Ещё вопрос — особый случай, если всех одинаковое число, то все – «победители» или «проигравшие» ?
    Ответ написан
    1 комментарий
  • Как натянуть frontend (React + JS) на backend (Java + Spring)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну натягивать точно ничего не стоит)
    Что касается вашего вопроса, то в backend должен быть написать RESTful сервис (API).
    В отличие от работы с шаблонизаторами (thymeleaf, mustache) фронт-энд является отдельным приложением, которое не связано с бэк-эндом. Т.е. абсолютно все равно на чем написан бэк будь то Spring, Django и т.д.
    Соответственно. когда у вас будет готов REST сервис, то вы можете приступать к разработке фронта.
    Чтобы разработать сервис на Spring можете начать с изучения аннотации @RestController
    https://www.baeldung.com/spring-controller-vs-rest...
    Вы также можете воспользоваться возможностями Spring Data REST, который сам сгенерирует необходимые эндпоинты с поддержкой HATEOAS.
    https://www.baeldung.com/spring-data-rest-intro

    Что касается React, то:
    https://www.youtube.com/watch?v=GNrdg3PzpJQ
    гуглим
    Ответ написан
    Комментировать
  • Срабатывание запроса в Mysql при клике на кнопку, ajax?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Почитайте про технологию AJAX
    Ответ написан
    Комментировать
  • Почему у стрелочной функции из объекта контекст виндоу?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    На learn.javascript, например, неплохо написали:
    Стрелка => ничего не привязывает. У функции просто нет this.
    При получении значения this – оно, как обычная переменная, берётся из внешнего лексического окружения.


    В вашем примере с литералом объекта можно добавить для понимания:
    const obj = {
      w() {
        console.log('w', this);
      },
      x: function () {
        console.log('x', this);
      },
      y: this,
      z: () => {
        console.log('z', this);
      },
    };
    
    obj.w(); // obj
    obj.x(); // obj
    console.log('y', obj.y); // Window
    obj.z(); // Window


    Запись литерала объекта не создаёт свой контекст: на момент записи this тот же, что и снаружи:
    const a = this; // Window
    const obj = {
      b: this, // тоже Window 
    }
    
    a === obj.b // true
    Ответ написан
    1 комментарий
  • Что на самом деле делает атрибут type у input?

    profesor08
    @profesor08
    Задает визуальное отображение, задает способ взаимодействия, дает доступ к тем или иным данным, которые соответствуют инпуту, и активируют работу тех или иных атрибутов. По сути это разные элементы, у них разные интерфейсы.

    Например, если у тебя type="text", то выглядеть будет как белый прямоугольник с рамкой, в который ты можешь печать текст и получить этот текст в атрибуте value

    Если у тебя type="number", то выглядеть будет несколько иначе, появятся кнопочки. Вводить можно будет только цифры. Начинают работать дополнительные атрибуты, которые ограничивают диапазон вводимого числа, шаг инкремента при нажатии на стрелки, а так-же появляется дополнительное форматирование.

    Если у тебя type="file", то вводить ты туда ничего не можешь, в value будет имя выбранного файла. А через свойство files можно будет получить доступ к выбранным файлам. Так-же начнет работать атрибут accept.

    И так для каждого типа инпута.

    Так что тут можно сказать лишь то, что сказать что атрибут type задает тип инпута, это как ничего не сказать.

    Преподаватель говорит, что атрибут type у input задаёт тип данных для этого элемента.

    Не он не прав, в зависимости от типа, браузер отображает разные элементы. И взаимодействовать с инпутами надо по разному.

    Но мне кажется, что атрибут type задаёт не тип данных, а лишь формат ввода данных.

    Учитывая выше написанное, это не так.
    Ответ написан
    Комментировать
  • Как сделать переключение слайдов при клике на метку?

    0xD34F
    @0xD34F
    Во-первых, перестаньте заниматься некрофилией - актуальная версия swiper'а седьмая, а не третья.

    Во-вторых.
    swiper.on('slideChange', ({ activeIndex }) => {
      document.querySelectorAll('.points .point').forEach((n, i) => {
        n.classList.toggle('active', i === activeIndex);
      });
    })
    
    document.querySelector('.points').addEventListener('click', ({ target: t }) => {
      if (t.classList.contains('point')) {
        swiper.slideTo([...t.parentNode.children].indexOf(t));
      }
    });

    А вообще,...

    ...если пытаетесь реализовать кастомную пагинацию, то среди настроек swiper'а есть такие, которые предназначены как раз для этого:

    pagination: {
      el: '.points',
      bulletClass: 'point',
      bulletActiveClass: 'active',
      renderBullet: (index, className) => `<div class="${className}">${index + 1}</div>`,
      clickable: true,
    },
    Ответ написан
    Комментировать