Append jQueryUI datepicker to div (错误的显示位置)

Append jQueryUI datepicker to div (wrong display position)

我在输入上使用 jQueryUI 日期选择器,默认情况下 jQueryUI 将 #ui-datepicker-div 附加到文档的 body

有问题的输入在屏幕上的“弹出窗口”div 中,这意味着在 div 之外的任何点击都会关闭“弹出窗口”。

因为 jQueryUI 将日期选择器附加到正文,当我单击日期选择器时,“弹出窗口”消失了...所以我尝试使用 ...

$("#myInput").datepicker({
  ...
  beforeShow: function() {
    $("#ui-datepicker-div").appendTo($("#myPopupDiv"));
  }
});

问题是 jQueryUI 然后根据位置在 #ui-datepicker-div 上设置 topleft CSS 样式相对于主体...但我需要它相对于“弹出窗口”div.

我试过将 position:relative 设置为 #myPopupDiv。我还尝试将 topleft 设置为 beforeShow 的一部分,但这些值会立即被覆盖。

有什么方法可以正确定位吗?

请看下面的简单示例,其中输入为 50px/100px,但日期选择器现在显示为 100px/200px...

$("input").datepicker({
  beforeShow: function() {
    $("#ui-datepicker-div").appendTo($("#myPopup"));
  }
});
#myPopup {
  position:absolute;
  top:50px;
  left:100px;
}
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<div id="myPopup">
  <input>
</div>

单例的位置可以用$.datepicker._pos = [x, y]设置。

但是,每次出现日期选择器对话框时,都会将 _pos 设置为 null,因此会在后续使用时重新计算位置。

在您的情况下,以下将在每次开仓前设置仓位。

$("input").datepicker({
    beforeShow: function() {
        $.datepicker._pos = [20, 0];
        $("#ui-datepicker-div").appendTo($("#myPopupDP"));
    }
});