Это довольно старый вопрос, однако недавно я столкнулся с проблемой, подобной этой, с jQuery UI Datepicker. Мы уже использовали решение, опубликованное @JaredC выше (в частности, этот фрагмент кода: $.extend($.datepicker,{_checkOffset:function(inst,offset,isFixed){return offset}});
), однако оно не будет работать для модального объекта, у которого есть вход, для которого нам нужно было отобразить раскрывающийся список.
Эта проблема возникает из-за того, что при прокрутке вниз страницы смещение ввода в модальном режиме изменяется относительно верха прокручиваемой страницы. Получившееся поведение будет означать, что средство выбора даты будет отображаться в другом вертикальном положении в зависимости от того, как далеко вы прокручивали страницу вниз (примечание: пока видимый и прокручиваемый указатель даты уже исправлен). Решение этой проблемы («ввод DatePicker, вложенный в модальный режим») состоит в том, чтобы вместо этого вычислить вертикальное расположение ввода относительно экрана просмотра, а затем добавить высоту ввода (позволяя свойству css «top» DatePicker быть прямо под входом).
Следующий фрагмент написан в coffeescript. Вместо того, чтобы возвращать обычное смещение в соответствии с решением @ JaredC, мы вместо этого получаем elementId ввода из объекта 'inst' и затем обращаемся к объекту через jquery, чтобы использовать его для вычисления расстояния ввода от верхней части экрана относительно окно просмотра.
# CoffeeScript
$.extend( $.datepicker, { _checkOffset: (inst,offset,isFixed) ->
offset.top = $("##{inst.id}").offset().top - $(window).scrollTop() + $("##{inst.id}")[0].getBoundingClientRect().height
offset
}
)
// JavaScript
$.extend($.datepicker, {
_checkOffset: function(inst, offset, isFixed) {
offset.top = $("#" + inst.id).offset().top - $(window).scrollTop() + $("#" + inst.id)[0].getBoundingClientRect().height;
return offset;
}
});