Ответы пользователя по тегу JavaScript
  • Как сделать чтобы нельзя было переназначить socket.on в socketio?

    @StiflerProger
    Покажу на примере console.log

    const original = console.log;
    console.log = function (template, callback) {
        if (template === "message") throw new Error('Forbidden action');
    
        return original.call(template, callback);
    }


    у тебя вместо console.log будет socket.on
    Ответ написан
    Комментировать
  • Как выполнить код последовательно?

    @StiflerProger
    async function SubmitData(data) {
      let captchaToken;
    
      // Проверка включена ли grecaptcha в настройках
      if ($('#grecaptcha').length > 0) {
        captchaToken = await getCaptchaToken({action: '123'});
      }
      
      console.log(captchaToken);
    
      const response = await postForm(address, formId);
    
      console.log(response);
    }
    
    function postForm(sendTo, formId) {
      return new Promise(res => {
        $.ajax({
          type: "POST",
          url: sendTo,
          data: $(formId).serialize(),
          contentType: "application/x-www-form-urlencoded",
          dataType: "text",
          success: (data) => {
            return res(data);
          }
        });
      })
    
    }
    
    function getCaptchaToken(opts) {
      const SITE_KEY = 'SITEKEY';
    
      return new Promise((res) => {
        $.getScript('https://www.google.com/recaptcha/api.js?render=' + SITE_KEY, () => {
          grecaptcha
            .ready(() => {
              grecaptcha
                .execute(SITE_KEY, opts)
                .then((token) => {
                  return res(token);
                });
            });
        });
      })
    }
    Ответ написан
    Комментировать
  • Как правильно вставить переменную в document.querySelector?

    @StiflerProger
    document.querySelector(`input[name=${fruits[i]}]`).value

    document.querySelector('input[name=' + fruits[i] + ']').value
    Ответ написан
    2 комментария
  • Как накинуть условие на длину массива в типе?

    @StiflerProger
    export interface ContextMenuListProps {
        title?: string;
        items: [ContextItemsProps, ...ContextItemsProps[]];
    }


    playground
    Ответ написан
    3 комментария
  • Как в javascript расшифровать зашифрованный (aes-128-ecb) текст в php?

    @StiflerProger
    function decrypt(encryptedText, key) {
      var decryptedBytes = CryptoJS.AES.decrypt(
        {
          ciphertext: CryptoJS.enc.Base64.parse(encryptedText)
        },
        CryptoJS.enc.Utf8.parse(key),
        { mode: CryptoJS.mode.ECB }
      );
      
      var plaintext = decryptedBytes.toString(CryptoJS.enc.Utf8);
      return plaintext;
    }
    
    var encryptedText = "P6WsUEHMRTa620LtYJ3Nqu9yKhGev0ZL4Ps+z61kWN4="; // Замените на свой зашифрованный текст
    var key = "mysecretpassword"; // Замените на свой ключ
    
    var decryptedText = decrypt(encryptedText, key);
    console.log("Decrypted Text:", decryptedText);
    Ответ написан
    Комментировать
  • Как правильно прописать вызов функции на событие, например, нажатие кнопки «Оплатить»?

    @StiflerProger
    ну потому-что тебе в html нужно просто добавить
    var payments = new cp.CloudPayments({
        language: "ru-RU",
        email: "",
        applePaySupport: false,
        googlePaySupport: true,
        yandexPaySupport: true,
        tinkoffInstallmentSupport: true,
    });


    а второй участок кода, уже запихнуть в функцию, и вызывать её по клику.
    А сейчас у тебя как только загружается страница выполняется метод payments.pay(...> который открывает форму оплаты

    upd:
    --<a href = "#pay" class="btn btn-success d-block btn-lg ajax-modal"><?php echo html_svg_icon('solid', 'shopping-cart'); ?> Купить</a>
    ++<a href = "#pay" onclick="checkout" class="btn btn-success d-block btn-lg ajax-modal"><?php echo html_svg_icon('solid', 'shopping-cart'); ?> Купить</a>


    в после body добавить это
    <script>
    var payments = new cp.CloudPayments({
        language: "ru-RU",
        email: "",
        applePaySupport: false,
        googlePaySupport: true,
        yandexPaySupport: true,
        tinkoffInstallmentSupport: true,
    });
    
    function checkout() {
      payments.pay("charge", {
        publicId: "ВАШ_ID",
        description: "Тестовая оплата",
        amount: 100,
        currency: "RUB",
        invoiceId: "",
        accountId: "",
        email: "",
        skin: "classic",
        requireEmail: true,
      });
    }
    </script>
    Ответ написан
  • Почему не работает код jquery?

    @StiflerProger
    -let thumbnail = event.target.closest('#single_image');
    +let thumbnail = $(this).find('#single_image');

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

    @StiflerProger
    предполагаю что у тебя $('.index-root-KVurS')это враппер всех машин, и поэтому у тебя цикл each выполняется только один раз, и в $(elem).find('div.iva-item-titleStep-pdebR > a') попадают сразу все названия и цены.
    --$('.index-root-KVurS').each(
    ++$('.index-root-KVurS > div').each(

    попробуй что-то типо этого, а лучше > div заменить уже на какой-то класс, который присущ каждой модели машины
    Ответ написан
    Комментировать
  • Как найти минимальное значение в строках матрицы?

    @StiflerProger
    Решение писать не буду, но направлю твоё мышление, потому-что у тебя сейчас код написан просто "от балды", и не делает вообще ничего

    Первым дело ты определил что размер матрицы (i x j), где i - высота матрицы (строки), j - ширина (столбцы)
    По заданию, нужно найти минимальное значение в каждой строке матрицы, соответственно перебираем строки
    for (let i = 0, i < mass.length, i++) {
      // mass[i] это строка массива в каждой итерации цикла
    }

    до этого момента у тебя всё правильно, а теперь начинаются ошибки. По логике, чтобы найти минимальное значение в строке, нужно пройтись по каждому элементу в текущей строке mass[i], соответственно количество итераций, во втором цикле, должно быть равно mass[i].length, а не mass.length, как у тебя сейчас
    for (let j = 0, j < mass[i].length, j++) {
      // mass[i][j] это каждый столбец в строке 
    }

    теперь, остаётся только сравнивать каждый элемент mass[i][j], и найти минимальный, для этого перед началом цикла, тебе нужно создать переменную, в которую ты запоминаешь минимальное значение. Ты пытался это сделать, но присваиваешь s = 0, хотя лучше занести сюда первое значение в массиве let min = mass[i][0] (задаю название переменной так, чтобы было понятно что она означает)
    И перебирая элементы в цикле, ты должен сравнивать значение текущего минимального (min) и значение текущего элемента (mass[i][j]), если элемент текущий получился меньше, то присваиваешь его значение в минимальному
    // вариант 1.
    if (min > mass[i][j]) min = mass[i][j];
    
    // вариант 2.
    min = Math.min(min, mass[i][j]);


    по окончанию цикла, у тебя в переменной min, будет минимальное значение в строке матрицы
    for (let i = 0, i < mass.length, i++) {
      // mass[i] это строка массива в каждой итерации цикла
      // тут создавай переменную min
      for (let j = 0, j < mass[i].length, j++) {
        // mass[i][j] это каждый столбец в строке 
        
        // тут сравнивай текущее значение с минимальным
      }
      // тут у тебя min будет минимальным в строке
    }
    Ответ написан
  • Как добавить элементам массива свойства в зависимости от условия?

    @StiflerProger
    const arr = [
      { name: "А" },
      { code: 1, name: "Адыгея, Респ.", capital: "Майкоп" },
      { code: 104, name: "Азербайджан", capital: "" },
      { name: "Б" },
      { code: 2, name: "Башкортостан, Респ.", capital: "Уфа" },
      { code: 3, name: "Таганрог", capital: "" },
      { code: 5, name: "Сочи", capital: "" },
      { code: 105, name: "Беларусь", capital: "" },
      { name: "В" },
      { code: 33, name: "Владимирская обл.", capital: "Владимир" },
      { code: 34, name: "Волгоградская обл.", capital: "Волгоград" },
      { code: 35, name: "Вологодская обл.", capital: "Вологда" }
    ];
    
    for (let i = 0; i < arr.length; i++) {
      if (!arr[i].code) continue;
    
      if (!arr[i - 1].code) {
        arr[i].position = "top";
      } else if (i + 1 === arr.length || !arr[i + 1].code) {
        arr[i].position = "bottom";
      } else {
        arr[i].position = "center";
      }
    }
    
    console.log(arr);
    Ответ написан
    Комментировать
  • Почему не работает фильтрация?

    @StiflerProger
    const props = {
      purpose: "Здоровье марсиан",
      medications: [
        {
          Article: "Первое",
          Purposes: [
            {
              Purpose: "Мужское здоровье"
            },
            {
              Purpose: "Женское здоровье"
            }
          ]
        },
        {
          Article: "Второе",
          Purposes: [
            {
              Purpose: "Детское здоровье"
            }
          ]
        },
        {
          Article: "Третье",
          Purposes: [
            {
              Purpose: "Здоровье марсиан"
            },
            {
              Purpose: "Мужское здоровье"
            }
          ]
        }
      ]
    };
    
    console.log(
      props.medications.filter(
        (f) => !props.purpose || f.Purposes.find((e) => e.Purpose === props.purpose)
      )
    );

    Ответ написан
    Комментировать
  • Как выводить весь текст из textarea что бы найденное слово было подсвеченным красным?

    @StiflerProger
    Немного поправил твой код ещё, newArr и newArr_lengh глаза резали)

    function myPoisk() {
      var outPut = document.getElementById("output");
      var slovo = document.getElementById("input_poisk").value;
      var text = document.getElementById("text_area").value;
      var slova = text.split(' '); // массив исходных слов
      var dopVar = 0;
      slovo = slovo.trim();
    
      if (slovo == '') {
        alert('Введите слово!')
      } else {
        var i = 0;
        var letterIndex = 0; // индекс текущего символа
        for (i; i < slova.length; i++) {
          if (slovo.toLowerCase() == slova[i].toLowerCase()) {
            //outPut.innerHTML = 'Ваше слово найдено!' + '<br>' + '<br>' + `<span>${newArr[i]}</span>`;
            finish(text, letterIndex, slova[i].length);
            dopVar = 1;
            return false;
          }
          letterIndex += slova[i].length + 1; // +1, потому-что нужно учитывать пробелы
        }
        if (dopVar != 1) {
          alert("Такого слова нет!");
        }
      }
    }
    
    // Функция принимает координаты, которые нужно подсветить,
    // и выводит в #output
    function finish(text, from, size) {
    
      const answer = text.substr(from, size);
      const _text = text.replace(answer, `<span>${answer}</span>`);
    
      document.getElementById("output").innerHTML = _text;
    
    }


    Ответ написан
    4 комментария
  • Как вывести 2 числа?

    @StiflerProger
    Вариант №1
    const additional = createTableWithContent(`${randInt()} ${randInt()}`, "two");


    Вариант №2
    const additional = createTableWithContent(genInts(), "two");
    
    // =====
    function genInts(min = 1, max = 10) {
      return `${randInt(min, max)} ${randInt(min, max)}`;
    }
    Ответ написан
  • Скопировать текст?

    @StiflerProger
    Я как-то давно писал метод для копирования. Года 2 назад это было, поэтому не скажу что и почему сделал так xD
    но работает
    function copyToClipboard(text) {
        let span = document.createElement('span');
    
        span.style.position = 'absolute';
        span.style.top = 0;
        span.style.zIndex = -999;
        span.style.opacity = 0;
        span.style.color = 'initial';
        span.style.fontSize = 'initial';
        span.style.whiteSpace = 'pre';
    
        span.appendChild(
          document.createTextNode(text)
        );
    
        document.body.appendChild(span);
    
        let range = document.createRange();
        let selection = window.getSelection();
    
        selection.removeAllRanges();
        range.selectNode(span);
        selection.addRange(range);
    
        let success;
    
        try {
          success = document.execCommand('copy');
        } catch(e) {
          success = false;
        }
    
        selection.removeAllRanges();
    
        document.body.removeChild(span);
    
        return success;
      }
    Ответ написан
    Комментировать
  • Как сделать неизменяемую переменную?

    @StiflerProger
    codepen
    Ответ написан
    Комментировать
  • Как выполнить функцию внутри события 1 раз, если событие было вызвано несколько раз?

    @StiflerProger
    Нажимая каждый раз на кнопку1, у тебя будет добавляться каждый раз новый обработчик события на кнопку2
    $('.btn_1').click(function(){
      // этот код будет выполняться каждый раз когда ты будешь кликать по кнопке1
      $('.btn_2').click(function(){
        console.log('нажата кнопка 2');
      });
    });


    Чтобы работало как надо, подписывайся на события отдельно
    $('.btn_1').click(function(){
      console.log('нажата кнопка 1');  
    });
    
    $('.btn_2').click(function(){
      console.log('нажата кнопка 2');
    });
    Ответ написан
    Комментировать
  • Почему не срабатывает Math.floor?

    @StiflerProger
    return Math.floor( (presentDate - startDate) / 1000 );
    Ответ написан
    Комментировать