更新2:
我睡了一觉然后掀起了一些示例代码,试图进一步找出问题所在。
以下是使用firebug的console.log显示触发focusin事件的对象的示例:
1)点击第一个链接:黄色div显示 2)按Tab键:它应该标签进入黄色div内的链接
它确实如此,但随后它触发了focusin事件,并且由于某种原因,它似乎再次冒泡到红色div,然后被告知关闭黄色div。
甚至在我告诉黄色div不要传播焦点事件之后:
$('#innerDiv').focusin(function(e){e.stopPropagation()});
然后我尝试将focusin事件附加到父div上仅在我专注于内部div之后。
对于内部div中的第一个链接的标签,确实会在父div上设置focusin事件。这很好!但随后tabd到innerdiv中的下一个链接会使focusin事件再次关闭div。
所以,我想我还是难过。看来我似乎无法停止焦点冒泡。思考?理论?
以下原帖......
============================
我通过onclick事件显示div。如果你点击div之外,我想隐藏它。为此,我正在绑定身体上的一次点击事件:
$('body').one('click.myDivPopup', function(e) {
...close my div...
});
在div本身中,我告诉它不要传播事件,以便在div中实际点击不会触发对身体的点击:
$myDiv.click(function(e){e.stopPropagation()});
这样可以正常使用。
我还想隐藏div,如果一个选项卡跳出div。
我的想法是,在那种情况下,我可以在身体上使用focusin事件:
$('body').one('focusin.myDivPopup', function(e) {
...close my div...
});
同样,我不希望事件从div本身冒出来,所以添加了这个:
$myDiv.focusin(function(e){e.preventDefault()});
这不起作用。在myDiv中的元素内更改焦点会触发body上的focusin事件。
这可能是jQuery中的一个错误吗?如果是这样,有更好的方法来实现这个目标吗?
更新:
问题似乎是似乎没有办法确定DIV是否失去焦点,因为它永远不会有焦点。我的解决方案逻辑是看看ELSE是否有焦点在div之外(因此使用focusin)但是我遇到了div中焦点事件的问题,似乎通过触发它在身体上冒出来。
目前,我认为我的解决方案是必须在弹出窗口中添加一个CLOSE元素,然后让人们必须明确触发它。虽然不太理想,尤其是键盘导航。
答案 0 :(得分:0)
显示2个div会不会更容易。一个透明(不可见)div覆盖整个页面,另一个你真正想要显示。然后你只需要设置z-index
正确的身体< invisblediv< contentdiv。
然后为不可见的div注册click事件,单击时删除两者。成品。至少这是大多数例如模式对话框jquery插件工作我想
答案 1 :(得分:0)
如果您想使用focusin但不使用事件冒泡,为什么不使用focus
......?