GWT MouseOverHandler 和 MouseOutHandler 可怕的结果,元素同时保持鼠标悬停和鼠标移出事件?

GWT MouseOverHandler and MouseOutHandler horrible result, element keeps fire mouse over and mouse out events at the same time?

我对 GWT MouseHandler 事件有疑问:

这是代码:

@Override
    protected void extend(ServerConnector target) {
        final Widget widget = ((ComponentConnector) target).getWidget();

        widget.addDomHandler(new MouseOverHandler() {
            @Override
            public void onMouseOver(MouseOverEvent e) {
                widget.setVisible(false);
            }
        }, MouseOverEvent.getType());

        widget.addDomHandler(new MouseOutHandler() {

            @Override
            public void onMouseOut(MouseOutEvent event) {
                widget.setVisible(true);
            }
        }, MouseOutEvent.getType());
    }

我正在使用 Vaadin,它位于扩展连接器内。悬停元素是一个简单的标签。当我只使用 MouseOverHandler 或 MouseOutHandler 时,一切都很好,但是当我一起使用它们时,我得到了这个可怕的结果(请观看视频以理解我的意思):

http://tinypic.com/player.php?v=jrxpq0%3E&s=8#.VMSkFnCUc4Q

为什么MouseOverHandler和MouseOutHandler在一起时会这样?

这与gwt无关。当鼠标悬停在小部件上时,您正在隐藏该小部件。当元素隐藏时,鼠标不再位于其上,因此会触发 mouseOut 事件,从而使小部件再次可见。这将再次触发 mouseOver 事件并再次开始循环。

基本上是这样的:

<div onMouseOver="this.style='visibility:hidden;'" onMouseOut="this.style=''">blub</div>

或者在 jsfiddle 上玩:http://jsfiddle.net/9cwsqca4/