【问题标题】:Can a jQuery UI datepicker be matched to a click event's target?jQuery UI 日期选择器可以匹配点击事件的目标吗?
【发布时间】:2010-08-25 21:40:45
【问题描述】:

我编写了一个简单的 jQuery (1.4.2) UI (1.8) 小部件,它嵌入了一个 jQuery UI 日期选择器。我想检测用户何时在我的小部件外部单击,在这种情况下它应该自动隐藏自己。我的代码大致是这样的:

var self = this;
$(document).bind("click.mywidget": function(event) {
    var target = event.target;
    if (!self.container.has(target).length && target != self.container.get(0)) {
        self.hide();
    }
});

点击日期选择器中的日期或月份上一个/下一个按钮时会出现问题。出于某种原因,即使 Firebug 将这些元素显示为我的容器的后代,has() 检查对它们来说还是失败了。

发生了什么,我该如何解决?

【问题讨论】:

  • 您确定日期选择器在容器中吗?默认情况下,我已经看到它被附加到页面的末尾。

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


【解决方案1】:

在深入研究了 datepicker 源代码之后,我意识到发生了什么。显然,每当您单击日期或循环月份时,它都会清空整个 div 并重新创建它。

由于选择器在 DOM 中更靠后,它首先处理点击事件。到调用文档处理程序时,目标元素不再在 DOM 中,因此不再是容器的后代。

我匆忙的 hack 是检查目标的更直接的父母,看看他们中的任何一个是否是日期选择器表或标题。由于这个小部件是迄今为止我唯一使用的 datepicker,我可以假设点击这样的元素不应该算作容器外的点击。

一旦我想出一个真正的解决方案,我会更新这个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多