2013-03-12 82 views
8

我有一个div,我通过jQuery动态创建一些链接/按钮。当这个div失去焦点时,我需要删除它。这部分我可以做得很好。整个div和儿童jQuery聚焦

但是,现在我在div的包装上有focusout事件,当我点击div内的按钮时,包装失去了焦点,并且我的事件被触发。检查单击的元素是否是我可以做的包装的子元素,但由于包装不再具有焦点,我的事件不会再次触发以除去div。

我也尝试过.blur,但这并没有奏效。

这样做的最好方法是什么?

+0

请提供一个小提琴。 – honk31 2013-03-12 18:47:39

+2

请发布您的代码,然后*可选*提供小提琴。 – 2013-03-12 18:48:17

回答

12
$("#yourDiv").focusout(function() { 
    if ($(this).has(document.activeElement).length == 0) { 
     // remove div 
    } 
}); 

$(this) =您关注的div。

document.activeElement =当前焦点的元素。

$(this).has(document.activeElement)仅仅是检查是否有效元素的DIV的孩子

+0

谢谢,完美的作品:)其他答案链接已损坏,无法检查。 – 2015-04-17 07:26:56

+0

这解决了,如果我也是。谢谢! – rusvdw 2015-04-29 11:24:57

+7

对我来说没有工作,因为在这一点上,新的元素还没有得到重点,所以activeElement是身体。 – Bill 2017-01-10 20:39:04

1

与普通的JavaScript解决这个使用事件参数给出的relatedTarget的方式:

element.addEventListener('focusout', function(event) { 
    if (element.contains(event.relatedTarget)) { 
     // don't react to this 
     return; 
    } 
    // do something 
});