Сначала я думаю, что в объекте datepicker должен быть метод afterShowing
, где вы можете изменить позицию после того, как jquery выполнит все свои функции вуду в методе _showDatepicker
. Кроме того, параметр с именем preferedPosition
также был бы желателен, так что вы можете установить его и изменить его в jquery, если диалог отображается вне области просмотра.
Есть "хитрость", чтобы сделать это последнее. Если вы изучите метод _showDatepicker
, вы увидите использование закрытой переменной $.datepikcer._pos
. Эта переменная будет установлена, если никто не настроил ее раньше. Если вы измените эту переменную перед тем, как отобразить диалоговое окно, Jquery возьмет его и попытается разместить диалоговое окно в этой позиции, и, если оно будет отрисовано за пределами экрана, оно настроит его так, чтобы оно было видимым. Звучит хорошо, а?
Проблема есть; _pos
конфиденциально, но если вы не против. Вы можете:
$('input.date').datepicker({
beforeShow: function(input, inst)
{
$.datepicker._pos = $.datepicker._findPos(input); //this is the default position
$.datepicker._pos[0] = whatever; //left
$.datepicker._pos[1] = whatever; //top
}
});
Но будьте осторожны с обновлениями Jquery-ui, потому что изменение внутренней реализации _showDatepicker
может нарушить ваш код.