私は同じ問題を抱えています。jquery.ui.menu.js で問題をフィルタリングし_scrollIntoView
ました (オートコンプリートは ui.menu を使用します)。
_scrollIntoView: 関数 (アイテム) {
var borderTop、paddingTop、offset、scroll、elementHeight、itemHeight;
if (this._hasScroll()) {
borderTop = parseFloat($.css(this.activeMenu[0], "borderTopWidth")) || 0;
paddingTop = parseFloat($.css(this.activeMenu[0], "paddingTop")) || 0;
オフセット = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
scroll = this.activeMenu.scrollTop();
elementHeight = this.activeMenu.height();
itemHeight = item.height();
if (オフセット < 0) {
this.activeMenu.scrollTop(スクロール + オフセット);
} そうでなければ (オフセット + itemHeight > elementHeight) {
this.activeMenu.scrollTop(scroll + オフセット - 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);
};
お役に立てれば。