很多时候我们需要把页面滚动到指定控件的位置,比如校验表单是时候发现某项输入错误,需要把页面滚动到该项目的位置,一般网上看到的办法有使用jQuery的offset获得控件的位置,再操作滚动条把页面滚动到控件位置,其实通过研究jquery.validate的源码可以发现使用jQuery的focus方法可以强制页面滚动到控件位置
focusInvalid: function() {
if( this.settings.focusInvalid ) {
try {
$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])
.filter(":visible")
.focus()
// manually trigger focusin event; without it,
// focusin handler isn't called,
// findLastActive won't have anything to find
.trigger("focusin");
} catch(e) {
// ignore IE throwing errors when focusing hidden elements
}
}}
该方法缺点:只支持带有输入焦点的控件
优点:即时控件是嵌套在一个iframe里面的浏览器也会自动滚动iframe外层的滚动条保证控件可见