Ответы пользователя по тегу JavaScript
  • Замена тега через JS почему не работает?

    Starina_js
    @Starina_js
    full-stack web dev
    Какой робот? seo? Робот видит то, что приходит от сервера, а не во время работы js на фронте. То есть, изменяя h3 в моменте никакого влияние не оказывается на seo и роботов.
    Ответ написан
    Комментировать
  • Как обернуть элементы в контейнер внутри details с помощью JQuery?

    Starina_js
    @Starina_js
    full-stack web dev
    Как-то так?)

    $(document).ready(function() {
      $('.js-form-wrapper').each(function() {
        var $container = $('<div class="my-wrapper"></div>');
        $(this).find('.responsive, .js-form-type-managed-file').wrapAll($container);
      });
    });
    Ответ написан
    Комментировать
  • Как выводить определенное модальное окно?

    Starina_js
    @Starina_js
    full-stack web dev
    Теория.
    Получаете ответ от обработчика форм / бека - считываете ответ. Если успех -> вызываете функцию открытия формы с успехом, если ошибка -> форма с ошибкой (по id или data attr нужной формы).
    А еще это форма то может быть одна, просто вы в форму можете вставлять свои сообщения.
    Если форму пишите с нуля, то вам нужно сделать html разметку, css стили.
    Функция вызова формы - можно просто добавлять нужные классы для открытия формы.

    А если используете какой-то css фреймворк, допустим bootstrap, то там есть функции вызова формы и вообще сама форма готовая.

    Далее простой пример
    <!-- Модальное окно успешного результата -->
    <div id="modal-success" class="modal">
      <div class="modal-content">
        <span class="close">&times;</span>
        <h2>Успех!</h2>
        <p>Данные успешно отправлены.</p>
      </div>
    </div>
    
    <!-- Модальное окно с ошибкой -->
    <div id="modal-error" class="modal">
      <div class="modal-content">
        <span class="close">&times;</span>
        <h2>Ошибка!</h2>
        <p>Произошла ошибка при отправке данных.</p>
      </div>
    </div>


    // При успешной отправке данных
    const showSuccessModal = () => {
        document.getElementById("modal-success").style.display = "block";
    };
    
    // При ошибке отправки данных
    const showErrorModal = () => {
        document.getElementById("modal-error").style.display = "block";
    };
    
    // Закрытие модального окна при клике на крестик
    const closeButtons = document.getElementsByClassName("close");
    for (let i = 0; i < closeButtons.length; i++) {
        closeButtons[i].addEventListener("click", function() {
            const modal = this.parentElement.parentElement;
            modal.style.display = "none";
        });
    }
    
    //пример обработки ответа с формы
    
    const form = document.querySelector('form');
    
    form.addEventListener('submit', async (event) => {
      event.preventDefault();
    
      const formData = new FormData(form);
      const response = await fetch('/api/submit-form', {
        method: 'POST',
        body: formData
      });
    
      if (response.ok) {
        const result = await response.json();
        // обработка успешного ответа
        console.log(result);
      } else {
        const error = await response.text();
        // обработка ошибки
        console.error(error);
      }
    });


    // а это пример с promise .then 
    const form = document.getElementById("myForm");
    form.addEventListener("submit", function(event) {
      event.preventDefault(); // Предотвращаем отправку формы по умолчанию
      
      // Получаем данные из формы
    const formData = new FormData(form);
      
      // Отправляем данные на сервер с помощью Fetch API
      fetch("URL_СЕРВЕРА", {
        method: "POST",
        body: formData
      })
      .then(function(response) {
        if (response.ok) {
          showSuccessModal(); // Показываем модальное окно успешного результата
        } else {
          showErrorModal(); // Показываем модальное окно с ошибкой
        }
      })
      .catch(function(error) {
        console.error("Ошибка:", error);
        showErrorModal(); // Показываем модальное окно с ошибкой
      });
    });


    .modal {
      display: none; /* Скрываем модальное окно по умолчанию */
      position: fixed;
      z-index: 1;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      overflow: auto;
      background-color: rgba(0, 0, 0, 0.5);
    }
    
    .modal-content {
      background-color: #fefefe;
      margin: 15% auto;
      padding: 20px;
      border: 1px solid #888;
      width: 80%;
    }
    
    .close {
      float: right;
      font-size: 28px;
      font-weight: bold;
      cursor: pointer;
    }
    
    .close:hover,
    .close:focus {
      color: #000;
      text-decoration: none;
      cursor: pointer;
    }
    Ответ написан
    1 комментарий
  • Почему MathJax.typeset() не работает?

    Starina_js
    @Starina_js
    full-stack web dev
    Вместо вызова MathJax.typeset() попробуйте использовать MathJax.typesetPromise() для перерендеринга элементов после определенных действий пользователя.

    Может поможет
    и еще

    MathJax.typesetPromise().then(() => {
            // Рендеринг MathJax завершен
            // Выполните другие действия здесь
        });


    или посмотреть порядок подключения библиотеки)
    Ответ написан
  • Почему в всех элементах списка одно и тоже значение?

    Starina_js
    @Starina_js
    full-stack web dev
    Кажется проблема связана с использованием одной и той же переменной DATA_PUBLISHED внутри цикла map(). Каждая итерация цикла должна иметь свою собственную переменную DATA_PUBLISHED, чтобы сохранить соответствующие значения для каждого элемента списка ITOG.

    Вообще этот код хотя бы выровнять, визуально поправить)
    Ответ написан
    Комментировать
  • Вызов функции один раз в компоненте VUE при срабатывании watch?

    Starina_js
    @Starina_js
    full-stack web dev
    Возможо
    watch(
      () => storeRisks.isClearRisk,
      (newValue, oldValue) => {
        if (newValue) {
          onRisk(newValue);
        }
      },
      { immediate: true }
    );


    или

    let isRiskHandled = false;
    
    watch(
      () => storeRisks.isClearRisk,
      (newValue) => {
        if (!isRiskHandled) {
          onRisk(newValue);
          isRiskHandled = true;
        }
      }
    );
    Ответ написан
  • Как можно в Js реализовать доступ к полям родительского "класса"?

    Starina_js
    @Starina_js
    full-stack web dev
    В вашем примере obj является простым объектом и не связан с прототипом класса.
    Поэтому, если вы измените obj в одном экземпляре класса, это не отразится на других экземплярах.

    Если вы хотите, чтобы изменения obj в одном экземпляре класса отражались на других экземплярах, вам нужно превратить obj в свойство прототипа класса.

    class A {
      constructor() {
        if (!A.prototype.hasOwnProperty('obj')) {
          A.prototype.obj = { 'b': 1, 'c': 2 };
        }
      }
    }
    
    class B extends A {
      constructor() {
        super();
        this.nvmProp = 'zZzz';
      }
      changeObj() {
        this.obj.b = 10;
      }
    }
    
    class C extends A {
      constructor() {
        super();
        this.nvmProp = 'zZzzZz';
      }
      changeObj() {
        this.obj.c = 20;
      }
    }
    
    let a = new A();
    let b = new B();
    let c = new C();
    
    b.changeObj();
    c.changeObj();
    
    console.log(b.obj); // {b: 10, c: 20}
    Ответ написан
    1 комментарий
  • Как сделать автоматический переход на следующий input?

    Starina_js
    @Starina_js
    full-stack web dev
    А если так?

    $('input').keyup(function(){
      if($(this).val().match(/^\d{1}$/)){
        $(this).closest('div').next('div').find('input').focus();
      }else{
        $(this).val('');
      }
    });
    Ответ написан
    Комментировать
  • Как оптимальнее вывести процентное соотношение каждого символа в строке?

    Starina_js
    @Starina_js
    full-stack web dev
    Может как-то так?
    function orderedCount2(str) {
        const symbols = new Map();
        for (const c of str) {
          const currCount = symbols.get(c) || 0;
          symbols.set(c, currCount + 1);
        }
        const totalCount = str.length;
        const orderedSymbols = {};
        for (const [symbol, count] of symbols.entries()) {
          orderedSymbols[symbol] = (count / totalCount) * 100;
        }
        return orderedSymbols;
      }
    input: 
    orderedCount("hello world")
    output
    
    {
      h: 9.090909090909092,
      e: 9.090909090909092,
      l: 27.27272727272727,
      o: 18.181818181818183,
      ' ': 9.090909090909092,
      w: 9.090909090909092,
      r: 9.090909090909092,
      d: 9.090909090909092
    }
    Ответ написан
    2 комментария
  • Почему не работает споллер?

    Starina_js
    @Starina_js
    full-stack web dev
    Потому что у вас ошибка на ошибке)

    - не claccList, а classList,
    - не sppollers / sppoller, а spollers / spoller
    и тут
    matchMedia.addEventListener(function () {
            initSpollers(spollersArray, matchMedia);
          });


    Какое событие должно отслеживаться для matchMedia ? click?

    matchMedia.addEventListener('click', function() {
                    initSpollers(spollersArray, matchMedia);
                });


    Сначала смотрите в консоль, она рассказывает где ошибки.
    Но даже исправив такие , то все равно надо разобраться как это все должно работать)
    Ответ написан
    2 комментария
  • Почему возникает ошибка popup.js:32 Uncaught TypeError: Cannot read properties of null (reading 'value')?

    Starina_js
    @Starina_js
    full-stack web dev
    1. document.querySelector('input-name') (и другие такие же) — Что за selector такой 'input-name'?
    Либо ('.input-name') - как класс, либо ('input[name="input-name"]')

    2. Везде const поставить:
    const userName = nameInput.value;
    const tel = telInput.value;
    const text = textInput.value;


    получается в попапе есть форма, по событию отправки нужно куда-то передавать данные?
    тогда можно просто найти form , а там получить все значения из инпутов

    new FormData(form)

    Пример
    Ответ написан
    Комментировать
  • Как реализовать закрытие при клике на фон и заблокировать скролл?

    Starina_js
    @Starina_js
    full-stack web dev
    Ух.. Код немного избыточен.
    Как я понял, у вас есть кнопка, которая открывает меню. Необходимо по клику открывать меню, блокировать скролл документа, плюс чтобы темнел фон. А при клике вне объекта меню - закрывалось меню, исчезал фон, скролл появлялся.

    1. Как заблокировать скролл? Вешать на body - overflow: hidden при клике на кнопку.
    2. Закрытие при клике вне меню. (загуглил, автор https://misha.agency/javascript/klik-vne-elementa.html)
    jQuery(function($){
    	$(document).mouseup( function(e){ // событие клика по веб-документу
    		var div = $( "#popup" ); // тут указываем ID элемента
    		if ( !div.is(e.target) // если клик был не по нашему блоку
    		    && div.has(e.target).length === 0 ) { // и не по его дочерним элементам
    			div.hide(); // скрываем его
    		}
    	});
    });
    Ответ написан
  • Как постоянно отслеживать classList.contains без SetInterval?

    Starina_js
    @Starina_js
    full-stack web dev
    Оно?
    https://developer.mozilla.org/ru/docs/Web/API/Muta...

    Пример там есть, ну или чутка по нему по-гуглить :)
    Ответ написан
    1 комментарий
  • Как выгрузить Яндекс карту как картинку?

    Starina_js
    @Starina_js
    full-stack web dev
    Как вариант использовать js puppeteer

    const puppeteer = require('puppeteer');
    
    (async () => {
      const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
      const page = await browser.newPage();
      await page.goto('https://buddy.works');
      await page.screenshot({path: 'buddy-screenshot.png'});
    
      await browser.close();
    })();


    https://buddy.works/guides/how-take-screenshots-wi...
    Ответ написан
  • Ошибка 400,403 как исправить?

    Starina_js
    @Starina_js
    full-stack web dev
    jquery ajax? fetch?
    Через что инициализируем отправку?

    Если через fetch , то Promise переходит в состояние rejected при ошибке сети или если что-то препятствует завершению запроса. В противном случае наступает состояние resolved, по нему можно смотреть какой ответ.
    И если ошибка -> повторяем запрос (Promise#catch)

    Если через $.ajax() то на сколько помню, там в error: function () падает. Посмотрите доку.

    А вообще надо бы разобраться, почему так происходит, что иногда 400/403 падают, судя по всему с wp чет не фурычит)
    Ответ написан
    Комментировать
  • Скрипт php для создания json файла, как правильно создать?

    Starina_js
    @Starina_js
    full-stack web dev
    Сам json формируется так
    $items = [
    	"item1" => [
    		"name" => "itemName1",
    		"code" => "itemCode1",
    		"options" => [
    			"var" => "rav"
    		]
    	],
    	"item2" => [
    		"name" => "itemName2",
    		"code" => "itemCode2",
    	],
    ];
    
    $json = json_encode($items);
    
    // Сохранить в файл можно так
    file_put_contents("/path/my.json", $json);
    
    //есть еще параметры, допустим FILE_APPEND - дописываем в конец файла


    А если нужно написать страничку, то создаем html разметку с
    Внутри form указываем нужные input, Форма тип post, button submit.

    При сохранении, получаем значения инпутов ($_POST["input"]) , валидируем и сохраняем как json

    Гуглим , первая ссылка с примерами - https://metanit.com/php/tutorial/3.1.php
    Ответ написан
    Комментировать