jqueryui datepicker使用对html/body的最近调用单击不识别datepicker表之外的dom

jqueryui datepicker使用对html/body的最近调用单击不识别datepicker表之外的dom,jquery,jquery-ui-datepicker,Jquery,Jquery Ui Datepicker,我有一个关于这个问题的例子 我试图完成的是,当您在文档的html/正文中单击时,我会查看事件目标元素是否在div中。在我引入JQuery UI datepicker之前,这一切都很正常。当在一天内单击时,锚点不会被识别为在外部div内。这就像jQuery最近的调用看到的唯一一件事是在树中向上移动,并在datepicker创建的表处停止。有什么想法吗?您需要将datepickerEl声明为全局变量,因为它没有到达click handler范围 我要做的另一个更改是,如果条件方法最接近父对象,则会进

我有一个关于这个问题的例子


我试图完成的是,当您在文档的html/正文中单击时,我会查看事件目标元素是否在div中。在我引入JQuery UI datepicker之前,这一切都很正常。当在一天内单击时,锚点不会被识别为在外部div内。这就像jQuery最近的调用看到的唯一一件事是在树中向上移动,并在datepicker创建的表处停止。有什么想法吗?

您需要将
datepickerEl
声明为全局变量,因为它没有到达click handler范围

我要做的另一个更改是,如果条件方法
最接近
父对象
,则会进行更改,因为可以单击datepicker中的元素,并且仍然在
class=“outer”
div中

此外,您还需要将事件调用更改为
e.stopPropagation()
(您将方法名称与
e.preventDefault()
,我猜仅用于单击、提交等事件默认行为)

我想这就是您正在搜索的内容:

var datepickerEl;
$(function() {
    datepickerEl = $('.outer').datepicker();
    $('html,body').click(function(e) {
         e.stopPropagation();
         if ( ! $(e.target).parents([datepickerEl]).length ) {
             alert('What is going on');
         }
     });
 });

我想你的意思是停止广播,很奇怪。如果向上遍历e.target的父对象,它实际上会在表中停止。但是如果你抓住桌子本身,它确实有一个父对象。。。是的,这就是我发现的。这就像jqueryui在不同的上下文中为事件目标工作一样。这也是特定于控件的。我用一个简单的表结构进行了尝试,它能够正确地遍历dom。我一定是忘记更新了。谢谢使用父母似乎确实在外部不起作用的地方起作用。我认为outer会沿着链向上遍历,直到它找到匹配的元素,或者直到它无法再遍历为止,并且parents会在找到匹配的元素后继续遍历,以查看是否有其他匹配的元素。因此它不需要全局选项,但parents()实际上会正确地沿着链向上遍历。不确定为什么,因为我认为唯一的区别是一个在比赛后停下来,另一个找到了所有的比赛。奇怪的是,如果你把和你关系最亲密的父母换出去,这是行不通的。不管怎样,这似乎行不通。家长呼叫返回的长度为4,这似乎是错误的。仍然不确定这为什么不起作用。对不起,我想我当时不太理解你的问题:S。。。当您单击div或其内部而不是外部时,alert()应该弹出吗?只有最接近目标div的外部元素?谢谢