我有同样的问题。我_scrollIntoView
在 jquery.ui.menu.js 中过滤了问题(自动完成使用 ui.menu)。
_scrollIntoView:功能(项目){
var borderTop, paddingTop, 偏移量, 滚动, elementHeight, itemHeight;
if (this._hasScroll()) {
borderTop = parseFloat($.css(this.activeMenu[0], "borderTopWidth")) || 0;
paddingTop = parseFloat($.css(this.activeMenu[0], "paddingTop")) || 0;
offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
滚动 = this.activeMenu.scrollTop();
elementHeight = this.activeMenu.height();
itemHeight = item.height();
如果(偏移量 < 0){
this.activeMenu.scrollTop(scroll + offset);
} else if (offset + itemHeight > elementHeight) {
this.activeMenu.scrollTop(scroll + offset - elementHeight + itemHeight);
}
}
},
offset
在 IE 中为负数,因此scroll + offset
始终近似为 0。这会强制滚动到顶部。在非 IE 中,偏移量是正的,所以这里没有什么奇怪的事情发生。
我通过覆盖来修复它_scrollIntoView
(参见http://jsfiddle.net/KdDfp/9/)
var menu = $(this.input.autocomplete("widget")).data("ui-menu");
var originalScrollIntoView = menu._scrollIntoView;
menu._scrollIntoView = function (item) {
if (this._hasScroll()) {`enter code here`
borderTop = parseFloat($.css(this.activeMenu[0], "borderTopWidth")) || 0;
paddingTop = parseFloat($.css(this.activeMenu[0], "paddingTop")) || 0;
var offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
if (offset < 0) {
// Glitchy 'offset', do nothing.
return;
}
}
originalScrollIntoView.apply(this, arguments);
};
希望这可以帮助。