jQuery UI datepicker可以与click事件的目标匹配吗?

我编写了一个简单的jQuery(1.4.2)UI(1.8)小部件,它嵌入了一个jQuery UI datepicker。 我想检测用户何时点击我的窗口小部件,在这种情况下它应该自动隐藏自己。 我的代码大致如下:

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()检查也会失败。

发生了什么,我该如何解决这个问题?

在挖掘了datepicker源之后,我意识到发生了什么。 显然,无论何时单击日期或循环数月,它都会清空整个div并重新创建它。

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

我仓促的黑客是检查目标的更直接的父母,看看他们中的任何一个是一个日期选择表还是标题。 由于这个小部件是我唯一使用的datepicker,我可以假设点击这样一个元素不应该算作容器外的点击。

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