我有同樣的問題。 我在jquery.ui.menu.js中過濾了問題_scrollIntoView
(自動完成使用ui.menu)。
_scrollIntoView: function (item) {
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;
offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
scroll = this.activeMenu.scrollTop();
elementHeight = this.activeMenu.height();
itemHeight = item.height();
if (offset < 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);
};
希望這有助於。