ここでの基本的な考え方は、オートコンプリート ウィジェットのコンテンツが をオーバーフローしている場合にのみheight
orを適用することです。これは、次の方法で検出できます。max-height
window
//Reset the height so the true height can be calculated.
$('.ui-autocomplete').css('height', 'auto');
//Get some values needed to determine whether the widget is on
//the screen
var $input = $('#the-id-of-the-input-node'),
inputTop = $input.offset().top,
inputHeight = $input.height(),
autocompleteHeight = $('.ui-autocomplete').height(),
windowHeight = $(window).height();
//The widget has left the screen if the input's height plus it's offset from the top of
//the screen, plus the height of the autocomplete are greater than the height of the
//window.
if ((inputHeight + inputTop + autocompleteHeight) > windowHeight) {
//Set the new height of the autocomplete to the height of the window, minus the
//height of the input and the offset of the input from the top of the screen. The
//20 is simply there to give some spacing between the bottom of the screen and the
//bottom of the autocomplete widget.
$('.ui-autocomplete')
.css('height', (windowHeight - inputHeight - inputTop - 20) + 'px');
}
CSS では、 のコンテンツがコンテナーに収まらないoverflow
場合にスクロール バーが表示されるように を設定する必要もあります。ui-autocomplete
.ui-autocomplete { overflow: auto; }
ここにこれを示す実際の例があります- http://jsfiddle.net/s6XTu/12/。