Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.07.2020, 15:14
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Прокрутка к обязательному полю
Всем привет.
Есть форма с обязательными полями - кастомной валидации нет - только по required браузерная.
Стандартное поведение браузера - при попытке отправить форму браузер прокручивает к первому полю которое не заполнено - но получается так что отступ поля от верха страницы слишком маленький - это поле закрывается фиксированным меню.
Можно ли как то увеличить этот оступ не делая свою кастомную валидацию? К примеру что бы первое пустое поле прокручивалось на средину страницы а не в самый верх
Ответить с цитированием
  #2 (permalink)  
Старый 09.07.2020, 15:43
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,719

<header></header>

<form>
  
  <div style="height: 500px"></div>
  
  <input type="text" required/>
  
  <div style="height: 3000px"></div>
  
  <input type="submit"/>
  
</form>

<style>
    body {
      padding-top: 50px;
    }

    header {
      height: 50px; 
      background: red;
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      opacity: 0.5
    }
</style>

<script>
    document.querySelector('form [type="submit"]').addEventListener('click', function () {
        const OFFSET_TOP = 25;
        
        const form = this.closest('form');
        const invalidField = [].filter.call(form.querySelectorAll('[required]'), function (field) {
            return !field.value;
        }).shift();

        if (!invalidField) {
            return;
        }

        const headerHeight = document.querySelector('header').offsetHeight;
        
        window.scrollTo(0, invalidField.getBoundingClientRect().top + document.body.scrollTop - headerHeight - OFFSET_TOP);
    });
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 09.07.2020, 16:23
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Nexus,
Я хотел уточнить куда копать, а вы даже код дали. Огромное спасибо!.
Чет и не подумал сразу что можно на клик и свой скрол сделать. ))
Ответить с цитированием
  #4 (permalink)  
Старый 09.07.2020, 16:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
return !field.value;
Скорее нужно проверять валидно ли значение, а не пусто ли оно.
Ответить с цитированием
  #5 (permalink)  
Старый 09.07.2020, 17:17
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,719

Bond, это не готовое решение, а его пример.
Обратите внимание на замечание laimas:
Сообщение от laimas
Скорее нужно проверять валидно ли значение, а не пусто ли оно.
Валидация значения поля происходит в строке 37.
Ответить с цитированием
  #6 (permalink)  
Старый 09.07.2020, 17:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
Валидация значения поля происходит в строке 37
Это обязательность заполнения, а что если заполнено, но не тем? В вашем случае достаточно пробела и будет брак. То есть, чтобы все это вкупе работало как следует, нужно указать полям и правила, и обрабатывая событие submit проверять их.
Ответить с цитированием
  #7 (permalink)  
Старый 09.07.2020, 18:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Nexus,
const invalidField = form.querySelector(':invalid');
Ответить с цитированием
  #8 (permalink)  
Старый 09.07.2020, 20:33
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,719

Сообщение от laimas
Это обязательность заполнения, а что если заполнено, но не тем?
Я изначально не планировал писать валидатор, в моем примере достаточно проверки на длину строки.

рони, спасибо, я почему-то считал, что у этого селектора недостаточная поддержка браузерами.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чат прокрутка вниз scrollTop smegol Общие вопросы Javascript 12 09.08.2018 19:46
Прокрутка фиксированного(плавающего) блока(элемента) если он больше окна браузера greenseer Элементы интерфейса 5 08.02.2017 16:33
Плавная прокрутка к якорю krionic jQuery 2 14.02.2015 22:41
прокрутка с использованием условия imedia Элементы интерфейса 0 08.06.2014 21:33
прокрутка изображений RGun jQuery 3 08.03.2010 10:03