7

我正在使用 Twitter Bootstrap 开发一个表单,该表单使用固定在顶部的导航菜单(随页面滚动,但保持固定在其顶部)和http://reactiveraven.github.com/jqBootstrapValidation/用于简单的表单验证样式。

但是,我遇到的问题是,当弹出一个验证气球说“请填写此字段”时,浏览器会向上滚动到输入框位于页面最顶部的位置。在正常情况下,这很好,但是由于我的菜单设置,它被隐藏了。有什么办法可以接管此滚动并为其添加偏移量以防止这种情况发生?

4

2 回答 2

9

form我正在使用完全相同的设置,我发现使用该元素没有简单的方法。我的技巧是观察无效的input// selecttextarea然后从中引发一些问题。这不是最好的解决方法,尤其是在有很多无效输入的情况下,但它帮助我解决了我需要的问题。希望其他人会过来并能够清理一下。

function scrollToInvalid() {
  // Height of your nav bar plus a bottom margin
  var navHeight = 60;
  // Offset of the first input element minus your nav height
  var invalid_el = $('input:invalid').first().offset().top - navHeight;

  // If the invalid element is already within the window view, return true. If you return false, the validation will stop.
  if ( invalid_el > (window.pageYOffset - navHeight) && invalid_el < (window.pageYOffset + window.innerHeight - navHeight) ) {
    return true;
  } else {
    // If the first invalid input is not within the current view, scroll to it.
    $('html, body').scrollTop(invalid_el);
  }
}

$('input').on('invalid', scrollToInvalid);
于 2013-02-19T22:00:44.853 回答
2

这可以通过 html 元素上的简单 css 来完成

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

scroll-padding-bottom: 100px;如果您有粘性页脚,请类似地使用

适用于所有现代浏览器,当然 IE 除外 有关更多信息,请参见此处 https://css-tricks.com/almanac/properties/s/scroll-padding/

于 2021-03-12T12:36:54.583 回答