【问题标题】:How to tell which datepicker the widget is open for如何判断小部件为哪个日期选择器打开
【发布时间】:2013-05-21 15:40:46
【问题描述】:

这个问题与Check if datepicker is open 类似,不同之处在于它与一个有多个日期选择器控件的页面有关。

当页面上有多个日期选择器时,jQuery UI 似乎只创建一个在所有日期选择器之间共享的日期选择器小部件。

我正在尝试通过日期选择器 UI 或其他方式找到一种方法来找出小部件是为哪个日期选择器打开的。不幸的是,经过验证的真实测试,例如:

$('#someDatepicker').datepicker('widget').is(':visible');

无论小部件为哪个日期选择器打开,只要它在某处可见,都返回 true。

【问题讨论】:

  • 我能给出的唯一建议是使用beforeShow 事件来捕获日期选择器所属的元素并将其存储为全局变量。似乎没有一种明智的方法来找到对话框的所有者...api.jqueryui.com/datepicker/#option-beforeShow

标签: javascript jquery jquery-ui jquery-ui-datepicker


【解决方案1】:

通过source code for datepicker爬取后,我在第718行附近找到了一些相关代码:

inst = $.datepicker._getInst(input);
if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
    ...
}

使用这段代码,我对这些内部对象进行了深入挖掘,并创建了一个fiddle。看起来$.datepicker._curInst.id 会给你日期选择器小部件打开的文本框的ID。

使用风险自负,因为该对象是内部的且未记录在案,并且可能在库的未来版本中更改/移动/删除。

【讨论】:

  • 由于当前实例在调用 $selector.datepicker('refresh') 时被重新分配,我最终使用 $.datepicker._curInst.id 来确定实际需要刷新的日期选择器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 2020-02-21
  • 2016-06-18
  • 1970-01-01
相关资源
最近更新 更多