У меня есть форма 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
в верхней части страницы (это верно для других тестов)
Что не так с моей функцией?