Javascript 如何阻止Mouseleave在目标上方出现的元素上触发?

Javascript 如何阻止Mouseleave在目标上方出现的元素上触发?,javascript,jquery,jquery-ui-datepicker,mouseleave,Javascript,Jquery,Jquery Ui Datepicker,Mouseleave,jQuery的mouseleave似乎会触发任何覆盖元素。我不希望这些覆盖元素被视为“超出”我的目标区域。下面是一个使用jQueryUI中的datepicker的简单示例: 请注意,当鼠标位于日期选择器上时,将触发mouseleave。对于这个datepicker示例,有什么好的解决方案可以防止这种情况?对于我将来可能添加的覆盖目标的元素,有什么好的解决方案呢?您可以使用relatedTarget事件的属性来筛选处理程序: .mouseleave(function(e){ if($(e

jQuery的mouseleave似乎会触发任何覆盖元素。我不希望这些覆盖元素被视为“超出”我的目标区域。下面是一个使用jQueryUI中的datepicker的简单示例:


请注意,当鼠标位于日期选择器上时,将触发mouseleave。对于这个datepicker示例,有什么好的解决方案可以防止这种情况?对于我将来可能添加的覆盖目标的元素,有什么好的解决方案呢?

您可以使用
relatedTarget
事件的属性来筛选处理程序:

.mouseleave(function(e){
    if($(e.relatedTarget).closest('.ui-datepicker').length) return;
    $("#status").html("Status: Mouse is OUTSIDE");
});

这里的问题是datepicker弹出窗口是绝对定位的,因此不是
.wrapper
元素的子元素。因此,其上的任何鼠标活动都不会冒泡到
.wrapper
。一种解决方法是对照
.wrapper
元素的已知边界检查鼠标坐标,尽管这很难看。其他人可能知道更好的解决方案。datepicker附加在您的包装器之外。这就是原因。这是我提到的co ords方法的替代方法,但在jQUI更改其“类名:检查此项:解决方法。非常好,我试图用
isTarget
”找到一些东西,但这似乎奏效了!非常好的解决方案。这将是jQuery核心事件中值得添加的内容。在此之前,我没有使用
relatedTarget
属性来阅读MDN:)啊,因为relatedTarget是事件中涉及的另一个元素,所以我可以在这里包含一个类列表,这些类与我不希望被视为“外部”的覆盖元素相关。爱死它了!
.mouseleave(function(e){
    if($(e.relatedTarget).closest('.ui-datepicker').length) return;
    $("#status").html("Status: Mouse is OUTSIDE");
});