Задать вопрос
  • Почему не получается обратиться к this в JavaScript?

    @GrayHorse
    Ошибка в коде в том, что при вызове filter.update.country() this является объект update, а не filter.

    JS код, идентичный коду на Java:
    class Filter {
        static sex = null;
        static player = null;
        static country = null;
    
        static updateSex() {
            Filter.sex = document.querySelector("#sex").value;
        }
        static updatePlayer() {
            Filter.player = document.querySelector("#player").value;
        }
        static updateCountry() {
            Filter.country = document.querySelector("#country").value;
        }
    }
    
    Filter.updatePlayer();
    console.log(Filter.player);

    или
    class Filter {
        constructor() {
            this.sex = null;
            this.player = null;
            this.country = null;
        }
    
        updateSex() {
            this.sex = document.querySelector("#sex").value;
        }
        updatePlayer() {
            this.player = document.querySelector("#player").value;
        }
        updateCountry() {
            this.country = document.querySelector("#country").value;
        }
    }
    
    const filter = new Filter();
    filter.updateCountry();
    console.log(filter.country);


    Ну и рабочий аналог "кода" из вопроса:
    class Filter {
        fields = {
            country: null,
        }
        update = {
            caller: this,
            country() {
                this.caller.fields.country = "123";
            }
        }
    }
    const filter = new Filter();
    filter.update.country();
    console.log(filter.fields.country);
    Ответ написан
    Комментировать
  • Обработка обращений пакетами?

    Stalker_RED
    @Stalker_RED
    Есть такие штуки как брокеры сообщений, они специально придуманы для быстрого приема сообщений из разных источников, и передачи их обработчикам или клиентам по требованию.
    Там по ссылке их целый список, разной степени навороченности.

    примеры:
    https://habr.com/ru/post/488654/ RabbitMQ
    https://habr.com/ru/post/496182/ Apache Kafka

    Какой именно вам лучше подойдет - сложно сейчас сказать.
    Также можно Redis с этой целью применить.

    В общем виде схема примерно такая:
    Принимаете все подряд сообщения, ставите им статус "в очереди".
    Обработчик берет сообщение, ставит статус "в работе" и дату.
    Если обработал - меняет статус на "обработано".
    Какой-то вотчер периодически проверяет те что в работе, и если времени прошло много - меняет статус "в работе" на "в очереди" и ставит счетчик ошибок. Если Ошибки повторяются - меняет статус на "здесь ошибка в сообщении, разберитесь"

    С доставкой абонентам история похожая, только статус не "в работе" а "ожидает отправку", "отправлен", "принят" и т.д.
    Ответ написан
    Комментировать
  • Как правильно решить проблему TS2345?

    @HealSpirit
    Что такое MouseEventHandler? Эта функция, которая принимает в качестве аргумента event c типом MouseEvent и возвращает пустоту

    У вас функция handleChangeInfoMain типизирована как MouseEventHandler, хотя аргумент типизируется как string

    Попробуйте вот так:
    handleChangeInfoMain: (value: string) => void
    Ответ написан
    1 комментарий
  • Как в Jira вывести статистику для "Участники"?

    @Arty_Fact
    Я рекомендую с этим вопросом обратиться в тех. поддержку. Они очевидно неправильно показывают, что поле пустое. И если тыкнуть на число, предположу, что там не будет тикетов (если Участники и правда заполнены).
    А их ответ, пожалуйста, добавьте сюда.
    Ответ написан
    Комментировать
  • Каким образом свойство this.props доступно в методе render классового компонента?

    @DimaIs
    1.
    class AnyCompnent extends React.Component
    2.
    constructor(props) {
      super(props);
    }

    Почитайте про наследование классов в JS: ссылка
    Ответ написан
    Комментировать
  • Нужно ли оборачивать сбор данных из формы в promise?

    Stalker_RED
    @Stalker_RED
    Нет, не нужно делать ее асинхронной, из формы и синхронно получится данные собрать.

    1. Если вдруг вы переделаете форму так, чтобы у полей были name, то можете выбросить функцию getSaveData и использовать $(form).serialize();

    2. сбор данных не обязательно записывать в переменную, да еще и объявленную через let. Можно делать прямо вот так:
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: getSaveData() },  // переменная data не нужна
        // ...
    })


    или, если у ваших полей есть имена
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: $(form).serialize() },
        // ...
    })

    и можно использовать встроенный в браузер способ
    $.ajax({
        url: 'www.expample.ru/file.php',
        type: 'POST',
        data: { data: new FormData(form) },
        // ...
    })


    Кроме того, довольно странно делать отправку данных только по клику по кнопке. Обычно формы также отправляются при нажатии enter, и она таки отправится средствами самого браузера, "мимо" вашего ajax-ового отправлятора.

    Соответственно правильнее будет куак-то так:
    const $form = $("#idForm");
    $form.on('submit', function(evt) {
        evt.preventDefault(); // отмена обычной отправки
        
        $.ajax({
               type: "POST",
               url: $form.attr('action'),
               data: $form.serialize(),
          // ...


    А если вам вдруг не нужна поддержка очень старых браузеров, то можно вообще выбросить jQuery
    const form = document.getElementById('myForm');
    
    form.addEventListener('submit', function(evt){
      evt.preventDefault();
      fetch(form.action, {
        method: 'POST',
        body: new FormData(form)
      });
    });

    https://developer.mozilla.org/ru/docs/Web/API/Fetc...
    Ответ написан
    2 комментария
  • Почему не распознается переменная при ее подстановке в строку?

    ZerdoX-x
    @ZerdoX-x
    Frontend developer influenced by web, a11y, crypto
    Первый вариант правильный. Что именно у тебя возвращает undefined? Функция val()?

    Попробуй задебажить это поэтапно:
    1. Создай константу в которой будет хранится строка с нужным тебе селектором:
      const selectorString = `.c_ipt_surname${i}`
      console.log({ selectorString })

    2. Получи DOM элемент:
      const surnameElement = $(selectorString)
      console.log({ surnameElement })

    3. Получи значение, которое ввёл юзер:
      const surname = surnameElement.val()
      console.log({ surname })


    Последним пунктом я бы посоветовал выпилить jq и больше никогда им не пользоваться. Но этот пункт слишком opionated, я не стал его включать.
    Ответ написан
    4 комментария
  • Air M1 8/256 - хватит для Frontend разработки?

    Zoominger
    @Zoominger
    System Integrator
    Вполне хватит. У макбуков очень хорошая система управления памятью.
    Ответ написан
    2 комментария
  • Как получить state через fetch?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    case 'loadNotes':
      return [ ...state, ...action.payload ];
    Ответ написан
    1 комментарий
  • Почему зацикливается анимация?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В чём отличие от присваивания a = requestAnimationFrame(anim) и от обычного вызова requestAnimationFrame(anim)?
    только в том, что сохранили значение, которое возвращает вызов. Для этой функции это значение некий уникальный id, по которому, при необходимости, можно отменить вызов через cancelAnimationFrame(), но в приведённом коде это значение никак не используется.

    Почему идёт каждый раз вызов функции anim()
    Первый раз потому, что в конце кода стоит вызов requestAnimationFrame(). Последующие — потому, что в конце очередной отработки anim() есть вызов a = requestAnimationFrame(anim); при условии, что счётчик не превышен.
    Ответ написан
    Комментировать
  • Как выполнить действие если не было исключения в JS?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Да ГУГЛИТЕ немного, блин!!!!!!!

    РАЗ! : https://developer.mozilla.org/en-US/docs/Web/API/E...

    Возвращает промис. Ок

    ДВА! : https://developer.mozilla.org/en-US/docs/Web/JavaS...

    Неужели это трудно?
    Ответ написан
    4 комментария
  • Как каждые 100 выполнений цикла, сделать timeOut и продолжить его, пока не завершится?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для асинхронности должна быть другая логика. Нет цикла, есть функция, которая выводит очередные 100 элементов и, если элементы ещё остались, устанавливает таймер на вызов себя через заданное время.
    const foo = () => {
      const max = 439;
      let counter = 0;
      const next100 = () => {
        for (let i = 0; i < 100 && counter <= max; i += 1, counter += 1) {
          console.log(counter);
        }
        if (counter !== max) {
          setTimeout(next100, 4000);
        }
      }
      setTimeout(next100, 0);
    }
    foo();
    Ответ написан
    Комментировать
  • Как прервать выполнение цепочки промисов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    .then(onFulfilled, onRejected)вторая функция «ловит» ошибку и обрабатывает её, поэтому выполнение не прерывается.

    Вариант А. просто уберите её. И ловите ошибки в .catch() в конце цепочки.

    Вариант Б. возвращайте отвергнутый промис:
    // ...
    , function(reason) {
        console.log(reason); // Ошибка! (Тут Скрипт должен прервать дальнейшее выполнение!)
        return Promise.reject(reason); // передаём пас с ошибкой дальше по цепочке
      })
    и всё равно добавьте в конце блок .catch()
    Ответ написан
    Комментировать
  • Это работоспособный код?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Это работоспособный код.

    Смотрите ошибки в консоли браузера. Судя по вопросу, вы забыли подключить jQuery.
    Но он тут и не нужен:
    document.querySelector("#section__gallery-select-category option[value='0']").remove();
    Ответ написан
    1 комментарий
  • Входит ли в веб-разработку анимация для сайта?

    vabka
    @vabka Куратор тега Веб-разработка
    Во-первых, надо разделять анимированную графику и анимации самого сайта.

    Сайт анимируется через css, и это является частью вёрстки, и как отдельную услугу, мне кажется, предлагать это не имеет смысла.
    Следует просто упомянуть в своём резюме, что ты можешь анимировать сайты.

    Анимированная графика - это обычная анимированная графика.
    Её можно предлагать, как отдельную услугу, но это будет уже не веб-разработка, а работа художника/дизайнера/иллюстратора.
    Можно упомянуть, что ты можешь в процессе разработки сайта, нарисовать и всякие анимированные штуки и добавить их на сайт.
    Ответ написан
    Комментировать
  • Почему JS не подключает CSS при создании окна?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Потому что второй document.write перетирает ранее написанное.
    Ответ написан
    2 комментария
  • Почему код работает по-разному?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Потому что второй код неправильный.
    Если хочешь разобраться почему - дебаггер тебе в руки и вперёд!

    P.S. почему 10/2 делится нормально, а 10/0 возникает ошибка? Надо запилить вопрос на тостере
    Ответ написан
    Комментировать
  • Почему код работает по-разному?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Смысл алгоритма: два указателя, которые двигаются слева направо.
    Второй всегда правее первого.
    Сравниваются два элемента массива под указателями. Меняются местами при необходимости.

    Вот визуализация сортировки:
    Ответ написан
    Комментировать
  • Как добавлять/удалять класс при наведении?

    XanXanXan
    @XanXanXan
    Нужно сохранять в состоянии элемент при наведении на него через (onMouseEnter).

    А в className проверять, совпадает ли этот элемент и тот, что в состоянии. И если совпадает, добавлять ему нужный класс, иначе null.

    const [currentActive, setActive] = useState()
    Внутри скобок useState указываем элемент, если нужно задать его по умолчанию активным или оставляем их пустыми.

    className={currentActive === el ? "active" : null}
    В элементе прописываем выбор класса в зависимости от состояния.

    onMouseEnter={() => setActive(el)}
    Меняем состояние при наведении.
    Ответ написан
    9 комментариев
  • Можно ли вызвать функцию JS с параметрами для html документа?

    bingumd
    @bingumd
    ...
    так может лучше задать этим элементам один класс, на пример black, и в js:
    document.querySelectorAll('.black').forEach(el => {
        el.addEventListener('mouseover', () => el.style.backgroundColor = 'black')
    })


    или просто через css:
    .black:hover {
        background-color: black;
    }
    Ответ написан
    Комментировать