Контакты

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (13)

Лучшие ответы пользователя

Все ответы (33)
  • Почему не работает функция в браузере?

    @MrDecoy
    Верставший фронтендер
    function nameOfFunction () {
    alert (2+3);
    }

    nameOfFanction(); // опечатка.

    Вам редактор должен был предлагать автодополнением название Вашей функции (при попытке вызвать её), если бы Вы его использовали, то не было бы опечатки.
    Так же рекомендую научиться пользоваться линтером. (ESLint)
    Ответ написан
  • Что позволяет записывать в функции статические методы?

    @MrDecoy
    Верставший фронтендер
    Воспользуюсь спорным штампом и отвечу: так происходит, потому что "в JS всё - объект". Соответственно, как объектам, мы можем назначать свойства.
    С примитивами всё несколько сложнее. Мы вроде бы тоже можем назначить им свойство, но это иллюзия. Когда мы делаем подобное с примитивами, например строкой, то вызывается её конструктор String(), а когда операция "под капотом" завершается, то мы снова получаем примитив, таким образом, ошибки назначения свойства не возникает, но и свойство недоступно.

    Это если сжато.
    Подробно объяснять не быстро. Скорее всего Вам тут посоветуют почитать документацию, спецификацию. Я предложу почитать серию книг You Dont Know JS. Можно нагуглить перевод многих глав из этой серии книг.
    Ответ написан
  • Как сделать так, если до окончании таймера пользователь перекрасил/закрасил все path в SVG картинке, остановить таймер и вывести ALERT?

    @MrDecoy
    Верставший фронтендер
    1) Сохранять id таймера в соответствующем замыкании. Ну или хотя бы в глобале.
    то есть window.gameTimer = setTimeout()... Можете возвращать id таймера из функциие timer().

    2) Добавить для всех необходимых элементов, которые пользователь должен закрасить структуру данных.
    Например:
    {
    element: state
    }
    где element - ключ, который однозначно определяет элемент(уникальное значение дата атрибута, например(
    а state - значение. Например, 0 - не закрашено, 1 - закрашено.

    3) По факту клика на элемент(рекомендую через деллигирование) проверять что все элементы имеют состояние 1. И есть это истинно, то обнулять таймер через clearTimeout и перенаправлять на страницу результата или что там ещё Вам нужно.

    4) Profit.
    Ответ написан
  • Как избавиться от начального значение в useState?

    @MrDecoy
    Верставший фронтендер
    У Вас нет проблемы, которую Вы описали, потому что это работает несколько не так, как Вы, я полагаю, думаете.
    const Logic = () => {
      const [inputValues, setInputValues] = useState('');
      console.log('1)', inputValues);
      const onChangeInput = e => {
        setInputValues((currentState) => {
          console.log('2) current', currentState); 
          return e.target.value});
        console.log('3)', inputValues);
      };
    
      return <View inputValues={inputValues} onChangeInput={onChangeInput} />;
    };
    
    // Будем вводить букву 'a' в инпут. В итоге в консоле получим:
    // 1)"" <-- из-за useState('');
    // 2) current "" <-- так как значение мы ещё не обновили, то получаем то же начальное значение из useState('');
    // 3) "" <-- вызвывается ПОСЛЕ setInputValues, тем не менее, имеет ещё не обновлённое значение.
    // 1) a <-- произошло изменение состояния, компонент перерисовался.


    Дальше, в заивисимости от того, что Вы хотите сделать,
    выводите значение либо в "1)" - это вывод с новым state но перед перерисовкой,
    либо в "3)" Вам нужно выводить e.target.value.

    Операция изменения состояния - асинхронная и реакт может собирать несколько изменений состояния в одно для оптимизации.
    Ответ написан
  • Как правильно сделать динамическую форму на jQuery?

    @MrDecoy
    Верставший фронтендер
    Вариантов, на самом деле, несколько.
    С учётом что у Вас jQuery, то предложу следующее:
    Заведите переменную, отвечающую за состояние формы.
    Состояние будет определять какую группу контролов показывать через css, например по data-атрибуту. (Ведёт к разбуханию CSS. Лучше тоглить JSом по соответствующему селектору);
    Таким образом, например, можно менять значение дата атрибута на самой форме, а значение атрибута будет значение состояния.
    Каждой группе контролов назначаем обработчик, который будет менять состояние на следующее. (В примере через делигирование).

    Собственно.. ПРОФИТ.

    Набросок примера. На работоспособность не проверял:
    .form__input_stage{
          display: none;
        }
        
        .form[data-stage="1"] .form__input_stage[data-stage="1"]{
          display: block;
        }
    
        .form[data-stage="2"] .form__input_stage[data-stage="2"]{
          display: block;
        }

    <form action="" class="form" data-stage="1">
          <input type="text" class="form__input">
          <input type="text" class="form__input form__input_stage" data-stage="1">
          <input type="text" class="form__input form__input_stage" data-stage="2">
    </form>

    var form = document.querySelector('.form');
        form.addEventListener('change', formChangeHandler);
    
        function formChangeHandler(evt){
          var stage = Number(evt.target.dataset.stage);
          var nextStage = stage+1;
          form.dataset.stage = nextStage;
        }
    Ответ написан