Пользовательская функция getOffset возвращает недопустимую позицию элемента - PullRequest
0 голосов
/ 27 марта 2020

У меня есть форма HTML, которая загружается на страницу Laravel 5.x, моя форма имеет несколько полей ввода, и после отправки формы запускается функция validateForm, она находит недопустимые поля и прокручивает Пользователь обнаруживает недопустимое поле first , однако он возвращает неточное значение на Laravel сайтах, но, похоже, работает нормально в сокращенном тестовом примере:

function validateForm() {
  var forms = document.getElementsByClassName('needs-validation');
  var validation = Array.prototype.filter.call(forms, function (form) {
    if (form.checkValidity() === false) {
      event.preventDefault();
      event.stopPropagation(); 

      var errorElements = document.querySelectorAll('.form-control:invalid,.custom-select:invalid,.custom-control-input:invalid');

      window.scrollTo(0, getOffset(errorElements[0]).top - 30);
    } 

    form.classList.add('was-validated');
  });
}

my функция, которая находит положение элемента:

// Get the element offset
function getOffset (el) {
  var _x = 0;
  var _y = 0;
  while (el && !isNaN( el.offsetLeft) && !isNaN(el.offsetTop)) {
    _x += el.offsetLeft - el.scrollLeft;
    _y += el.offsetTop - el.scrollTop;
    el = el.offsetParent;
  }
  return { top: _y, left: _x };
}

Я получаю значение -3426, которое никогда не должно иметь место, потому что ввод составляет около 300px в верхней части страницы (это верно для других тестов)

Что не так с моей функцией?

...