Ответы пользователя по тегу JavaScript
  • При отправке данных из js через fetch, php код не исполняется, в чем причина?

    @alexalexes
    В message.php:
    var_dump(date('d.m.Y H:i:s'));
    var_dump($_POST);
    exit();

    Посмотрите, меняется ли время и содержание поста. Если один раз, а потом не меняется, то копайте заголовки кеша для браузера.
    Ответ написан
    Комментировать
  • Какая тут логика?

    @alexalexes
    Посмотрите в консоли, чему будут равны примеры:
    undefined || 0
    и
    3 || 0
    Сделайте вывод.
    Ответ написан
  • Как можно каждый раз при нажатии на кнопку создавать input, и потом при отправке формы получить данные из всех созданных input'ов через flask?

    @alexalexes
    можно было получить данные ИЗ ВСЕХ созданных мной input'ов

    Ну, например, дотягиваться до них любым методом документа, получающего ноду, и получать свойство value этой ноды:
    let input_value_1 = document.querySelector('CSS селектор на ваш первый input').value;
    let input_value_2 = document.querySelector('CSS селектор на ваш второй input').value;
    Ответ написан
    3 комментария
  • Как в регулярных выражениях написать, что строка должна начинаться с букв и не может начинаться с нижнего подчеркивания?

    @alexalexes
    Сделайте тремя отдельными элементарными регулярками - поддерживать такой код будет проще намного:
    if(       /^[a-zA-z]+/.test(login)  // проверка первого символа
       && /[a-zA-z0-9\-\.]+/.test(login)  // проверка входа символов в допустимый алфавит
       && !(/[^a-zA-z0-9\-\.]+/.test(login))  // проверка выхода символов из допустимого алфавита
       )
    {
      // комплексная проверка пройдена!
    }
    Ответ написан
  • Как называется подпрограмма внутри массива?

    @alexalexes
    Обычный элемент массива. Является анонимной функцией. Ничем примечательным, что элемент можно вызывать и передавать по ссылке, не выделяется. Нельзя сериализовать массив, сохранив функциональность данного элемента в массиве.
    Ответ написан
    Комментировать
  • Почему при переносе элементов по DOM происходит их дублирование?

    @alexalexes
    insertAfter
    Вам нужен не этот метод. Для перемещения узлов в пределах родителя используется replaceChild.
    PS:
    ".primary_menu ul li:nth-child(2)"
    Научитесь захватывать узлы нативными методами querySelector и querySelectorAll.
    Нет причин использовать JQuery в вашей задаче.
    Ответ написан
    Комментировать
  • Как сделать задержку после клика?

    @alexalexes
    Используйте setInterval, чтобы сделать счетчик обратного отсчета.
    Не совсем понятно, в какой момент вы хотите перейти по ссылке, но местечко найдется, где это вставить.
    let bonus_timer = 5; // глобальный счетчик обратного отсчета
    // что-то еще делаем перед началом отсчета
    let bonus_timer_handler = setInterval(function()
    {
      if(bonus_timer > 0)
      {
       // перерисовать title
       bonus_timer--; // уменьшить счетчик
      }
       else
      {
         // выдать бонус
        clearInteval(bonus_timer_handler); // зачистить генерацию событий setInterval
       }
    }
    , 1000); // обновить состояние bonus_timer каждую секунду
    Ответ написан
  • Какую книгу выбрать?

    @alexalexes
    Читай все, но книжек мало.
    Чем меньше технологий в названии, тем меньше будет галопом по Европам в содержании.
    Ищите книжки отдельно по PHP (второй уровень прокачки - фреймворки: Laravel, Yii, Symphony и т.д.), отдельно JS (второй уровень прокачки: VueJS, React и т.д.), отдельно CSS (второй уровень - препроцессоры), MySQL (второй уровень Postgres, СУБД из кровавого интерпрайза). В дополнение всякие Memcached, Redis, Rest, TreeQL. Книги по шаблонам проектированиям, MVC модели и т.д., системы управления версиями, типа Git, контейнеризация, типа Docker и т.д., администрирование Linux/MS.
    https://roadmap.sh/full-stack
    https://roadmap.sh/frontend
    Ответ написан
    9 комментариев
  • Как прибавить к текущему значению новое?

    @alexalexes
    let data = 0;
    
    document.querySelectorAll(".button").forEach(function (btn){
      btn.addEventListener("click", function (e){
        data += +e.target.parentElement.dataset.step;
    rect.style = `transform: rotate(${data}deg);`
    Ответ написан
    3 комментария
  • Подключение xml с помощью js к html?

    @alexalexes
    1. Нужно убедиться, что файлы script.js и data.xml находятся в том же каталоге, что и index.html.
    2. Нужен веб-сервер, так как ajax-запрос вы не сделаете на файл диска data.xml.
    На сервере должен быть определен домен (путь будет локальный), и в каталоге, с которым ассоциирован домен, должны находиться вышеупомянутые файлы.
    Обращаться к index.html необходимо через домен.
    Ответ написан
    Комментировать
  • Как спрятать ключи авторизации при HTTP запросах в JS?

    @alexalexes
    В JS - нельзя. От скриптов JS - можно.
    cookie с опцией http only. Только устанавливать куку должен сервер, JS тут не при делах, так как вы изолируете важные переменные от JS клиента.
    Ответ написан
    2 комментария
  • Как изменить размер (scale) объекта используя перетаскивания в js canvas?

    @alexalexes
    Очевидно же, что не нужно использовать преобразование функции, если аргументы содержат недопустимые значения. Делайте контроль допустимых значений перед применением функции. Если аргумент один - то у вас два состояния работы функции: обычное, и вырожденное. Если два аргумента, то четыре состояния: 1) обычное по X, обычное по Y; 2) обычное по X, вырожденное по Y; 3) вырожденное по X, обычное по Y; 4) вырожденное по X, вырожденное по Y.
    Ответ написан
    Комментировать
  • Как переписать код на более современный JS?

    @alexalexes
    Эта пуленепробиваемая конструкция будет работать и через 100 лет. Ничего не меняйте.
    Ответ написан
    Комментировать
  • Как на один элемент повесить два события, клик и двойной клик?

    @alexalexes
    this.content.querySelectorAll('.cell').forEach((cell) => {
      let timer = null; // дескриптор отложенного обработчика одного клика
      cell.addEventListener('click',  (e) => {
         if(timer)
           clearTimeout(timer); // при каждом клике сбрасываем отложенный обработчик обработки одного клика
         if(e.detail == 1) // на первом клике устанавливаем отложенный обработчик
           timer = setTimeout(handleClickCell, 250); // Выполнение функции по одинарному клику после ожидания второго клика 250мс
         if(e.detail == 2) // на втором - выполнение обработчика двойного клика
         {
            // благодаря счетчику detail в ивенте можем посчитать длину очереди непрерывных кликов, и в нужный момент выполнить функцию на втором клике
            console.log('111');
         }
        } );
    });
    Ответ написан
    1 комментарий
  • Как реализовать drug n drop тестирование?

    @alexalexes
    адаптивности при таком раскладе не возможно добиться

    Сделайте 2, 3 варианта картинок под разные разрешения. В JSON-e сообщите серверу, какой вариант тестили.
    p.s.: я думал сделать сеткой, т.е. типа как пазл картинка состоящая из одинаковых квадратиков (тогда это будет проще)

    Будет ниже энтропия, потенциальному роботу будет проще комбинировать варианты, чтобы выбрать случайно правильный.
    Еще, вы не сможете сделать так, чтобы квадраты точно устанавливались на свои места, будет неточность 1...10px.
    Можете взять формулу Пифагора и смягчить живому пользователю невозможность установить квадраты точно - у всех квадратов нестыковка по радиусу должна быть не больше определенного порога R0. Критерий проверки будет корень(dx^2 + dy^2) < R0. Где, dx - разность по X координат ориг. и установ. квадрата, dy - тоже разность по Y.
    R0 в пределах точности сенсора, скорее всего будет в 5...10px. Меньше поставите значение - пользователям будет сложнее проходить тест, больше поставите - уменьшите энтропию для роботов.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы музыка включалась сама тогда, когда изображение с ID "seconds" достигало поворота в 0 градусов?

    @alexalexes
    При попытке вызвать play(), вы получаете сообщение об ошибке в консоли:
    failed because the user didn't interact with the document first

    Это значит, вы не можете пользователю включить звук, если он никак не взаимодействовал с панелью управления тега audio.
    Это концепция предусмотрена разработчиками браузера, чтобы разработчики сайтов не использовали звуковые эффекты на своих сайтах вопреки ожиданию пользователей.
    Ответ написан
    Комментировать
  • Как отправить на почту JS данные Modx?

    @alexalexes
    По хорошему, вы в форму на стороне JS должны положить ID карточки товара в скрытое поле.
    На сервере, в сниппете AjaxForm нужно добавить хук, который по ID карточки товара получит все необходимые атрибуты этой карточки запросом из базы, считает необходимый файл превьюшки товара с каталога сервера и дополнит тело письма этими дополнительными атрибутами, или бинарником файла картинки/корректной внешней ссылкой на картинку.
    Это будет самый корректный вариант реализации.
    Ответ написан
    Комментировать
  • Как передать переменную из Js в python(Flask)?

    @alexalexes
    1. На JS любым способом сделать ajax запрос на сервер, передав нужный набор параметров для обработки.
    2. Обработать запрос на серверe, передать клиенту результат.
    3. На JS обработать результат в callback функции ajax.
    Примерная заготовка, как это будет на стороне JS:
    function getValue()
    {
      let xhr = new XMLHttpRequest();
      xhr.open("POST", "" /*<- тут должен быть адрес скрипта на сервере, где будет обработка запроса */, true);
      // создаем виртуальную форму, чтобы нагрузить запрос параметрами
      let t_form = new FormData();
      // нагружаем параметром форму
      t_form.append("input-id", document.getElementById('input-id').value);
      // ... еще какой-то параметр
      // t_form.append("какой-то параметр", "какое-то значение");
       // callback функция ответа
       xhr.onreadystatechange = function(e)
      {
         // состояние, когда ответ сформирован
         if(xhr.readyState === 4 && xhr.status === 200)
         {
             // что-то делаем с ответом, например выводим сообщение
              alert(xhr.responseText);
          }
       };
       // отправляем запрос на сервер, нагружаем его формой с параметрами
       xhr.send(t_form);
    }
    Ответ написан
    1 комментарий
  • Как посчитать разницу по координате х за клик мыши?

    @alexalexes
    // инициализация значений по умолчанию (тело конструктора, если использовать ООП. В классе будете использовать this контекст класса вместо window)
        window.is_mouse_catch = false; // зажата ли мышь?
        window.mouse_path = 0.0; // путь мыши
        // предыдущие координаты мыши
        window.cl_X = null;
        window.cl_Y = null;
        // конец инициализации
        // обработчик нажатия кнопки
        document.addEventListener('mousedown', function(e)
        {
          // фиксируем параметры мыши в переменных, за пределами локальной области видимости обработчика
          window.is_mouse_catch = true;
          window.mouse_path = 0.0;
          window.cl_X = e.clientX;
          window.cl_Y = e.clientY;
        });
        // обработчик отпускания кнопки
        document.addEventListener('mouseup', function(e)
        {
          // фиксируем отпускание кнопки мыши в переменной, за пределами локальной области видимости обработчика
          window.is_mouse_catch = false;
        });
        // обработчик движения мыши
        document.addEventListener('mousemove', function(e)
        {
          // если кнопку не нажимали, то прерываем обработчик
          if(window.is_mouse_catch === false)
            return;
          // определяем текущие координаты
          let currentX = +e.clientX;
          let currentY = +e.clientY;
          // считаем дельту пути
          let delta = ((currentX - window.cl_X) ** 2 + (currentY - window.cl_Y) ** 2) ** 0.5;
          // приращиваем дельту пути к общему результату
          window.mouse_path += delta;
          // переопределяем предыдущие координаты
          window.cl_X = currentX;
          window.cl_Y = currentY;
          // пишем в лог
          console.log('currentX: ' + currentX + '; currentY: ' + currentY + ' delta: ' + delta + '; total_path: ' + window.mouse_path);
        });
    Ответ написан
  • Зачем нужен блок инструкций без управляющей инструкции?

    @alexalexes
    var currentExtraStackFrame = null; // это нужно, чтобы не словить предупреждение в консоль undefined variable/property при обращении к свойству currentExtraStackFrame
    // этим методом вы задаете какое-то значение для свойства currentExtraStackFrame, если его нужно привести в какое-то не null значение (или вернуть в null - значение по умолчанию).
    function setExtraStackFrame(stack)
    {
      // if() тут может была лексема if, можно просто ее закомментить и не убирать скобки, чтобы git не анализировать их исправление, и так будет работать
      {
        currentExtraStackFrame = stack;
      }
    }
    Ответ написан
    2 комментария