Возврат на место ошибки

У меня в проекте при нажатии на кнопку, если поле пустое возвращает ошибку рядом с этим полем, вопрос в том, как при возникновении ошибки, возвращать клиента именно на место ошибки, а не просто на форму, например если ошибка на поле Номер, должен вернуть на поле номер, если на поле Имя тогда на поле имя, как это можно реализовать?

// Это моя проверка на пустоту 

beforeSend: function() {

  let a = false;

  if (email == '') {
    $("#email_error").show();
    a = true;
  }
  if (firstName == '') {
    $("#firstName_error").show();
    a = true;
  }

  if (phone == '') {
    $("#phone_error").show();
    a = true;
  }
  if (a) return false;
},
<! -- Как выглядит мое поле input и вывод ошибки -->

<input type="tel" class="field interTel datas phone_number" id="phone" name="phone" onkeyup="showOrHideBlock('phone_error','phone')" onchange="showBlock3()">
<strong><small id="phone_error" class="form-text text-" 
                 style="display: none; color: crimson">
                            Вы не указали телефон</small></strong>
<! --  Кнопка -->
<button type="submit" id="sendOrder" class="button button--prime">
                            Рассчитать
                        </button>


Ответы (1 шт):

Автор решения: Gelloiss

У Вас у каждой ошибки есть свой уникальный id, мы можем использовать это для того, чтобы перебрасывать пользователя по якорю к этому id (/#id), либо же использовать jq и функцию scrollTop, которая, как я понимаю, как раз сроллит до нужного элемента. ps: у нее также есть много возможностей, которые легко гуглятся (анимация, скорость прокрутки и т.п.). Вот вариант, который должен моментально скроллить до самой ошибки. Вы можете заменить так, чтобы скролл был не до ошибки, а до самого input, задав ему id (это у Вас уже и так реализовано) и передать этот id в scrollTop. Если все-таки будете делать скролл до самой ошибки, то рекомендую вынести id элемента в отдельную переменную (я это сделал в примере с ошибкой телефона), просто чтобы код был проще редактируемый.

beforeSend: function() {

  let a = false;

  if (email == '') {
    $("#email_error").show();
    $([document.documentElement, document.body]).animate({
        scrollTop: $("#email_error").offset().top
    }, 0);
    a = true;
  }
  if (firstName == '') {
    $("#firstName_error").show();
    $('body').scrollTo('#firstName_error');
    $([document.documentElement, document.body]).animate({
        scrollTop: $("#firstName_error").offset().top
    }, 0);
    a = true;
  }

  if (phone == '') {
    const phoneErrorId = "#phone_error";
    $(phoneErrorId).show();
    $([document.documentElement, document.body]).animate({
        scrollTop: $(phoneErrorId).offset().top
    }, 0);
    a = true;
  }
  if (a) return false;
},

UPD Код для комментария: Возврат на место ошибки

beforeSend: () => { //Заменил на стрелочную функцию. Это не обязательно, но привык юзать их. Тоже советую хотя-бы почитать про них, чтобы не пугаться)
  let a = false;
  let scrollToElement = false; //До какого элемента скроллить, если false - скролла не будет

  if (email == '') {
    const emailErrorId = "#email_error";
    $(emailErrorId).show();
    scrollToElement = scrollToElement === false ? emailErrorId : scrollToElement; //Если в scrollElement записано false, записываем значение emailError, иначе записываем scrollElement (осталяем значение без изменения)
    a = true;
  }

  if (firstName == '') {
    const firstNameErrorId = "#firstName_error";
    $(firstNameErrorId).show();
    scrollToElement = scrollToElement === false ? firstNameErrorId : scrollToElement;
    a = true;
  }

  if (phone == '') {
    const phoneErrorId = "#phone_error";
    $(phoneErrorId).show();
    scrollToElement = scrollToElement === false ? phoneErrorId : scrollToElement;
    a = true;
  }

  if (scrollToElement) { //если в scrollToElement записан какой-то элемент (значение scrollToElement не равно false)
    $([document.documentElement, document.body]).animate({
      scrollTop: $(scrollToElement).offset().top
    }, 0); //скроллим к этому элементу
  }

  return !a; //Если a = true - вернется false, если а = false - вернется true
}

→ Ссылка