HTML5 input required, scroll to input with fixed navbar on submit

前端 未结 9 2048
感情败类
感情败类 2020-12-08 09:35

When trying to submit a form with missing required fields, my browser (Chrome), displays a message mentionning there is a field missing, and if it\'s out of my screen, it sc

相关标签:
9条回答
  • 2020-12-08 09:55

    The only way I found is adding an 'override' to the invalid handler. To implement this for every input in your form you can do something like this.

    var elements = document.querySelectorAll('input,select,textarea');
    var invalidListener = function(){ this.scrollIntoView(false); };
    
    for(var i = elements.length; i--;)
        elements[i].addEventListener('invalid', invalidListener);
    

    This requires HTML5 and this is tested on IE11, Chrome and Firefox.
    Credits to @HenryW for finding that scrollIntoView works like expected.

    Note that the false parameter for scrollIntoView aligns the input with the bottom, so if you have a large form it may be aligned with the bottom of the page.

    jsfiddle

    0 讨论(0)
  • 2020-12-08 10:01

    Here's an EASY and FAST way.

    $('input').on('invalid', function(e) {
            setTimeout(function(){
                $('html, body').animate({scrollTop: document.documentElement.scrollTop - 150 }, 0);
            }, 0);
    });
    
    0 讨论(0)
  • 2020-12-08 10:04

    In modern browsers there is a new CSS property for that use case:

    html {
        scroll-padding-top: 50px;
    }
    

    Your JSFiddle updated: http://jsfiddle.net/5o10ydbk/

    Browser Support for scroll-padding: https://caniuse.com/#search=scroll-padding

    0 讨论(0)
提交回复
热议问题