1

我有一个简单的 GWT PushButton,它通过单击打开一些对话框。CSS 样式以 onHovering 更改按钮外观的方式编写。

当我通过单击此按钮打开一些对话框并关闭它时,问题就开始了。onHovering 样式仍然存在!

发生这种情况是因为在作为 PushButton 的父级的 CustomButton 中,有一个代码仅在 MouseOut 事件发生时才删除悬停。问题是,如果您用一些深色的半透明屏幕打开对话框,它永远不会发生。没有发出相应的事件,按钮保持 onHovered 状态。

我尝试通过手动触发此事件来解决此问题。幸运的是,当用户关闭该对话框时,我可以捕捉 onBlur 事件并尝试在那一刻做一些事情。我尝试手动创建 OnMouseOut 事件:

    @Override
    public void onBrowserEvent(Event event) {

        int type = DOM.eventGetType(event);
        if (type == Event.ONBLUR)
        {
            NativeEvent evt2 = Document.get().createMouseOutEvent(1, 0, 0, 0, 0, false, false, false, false, NativeEvent.BUTTON_LEFT, MyPushButton.this.getElement());
            MyPushButton.this.getElement().dispatchEvent(evt2);
        }

        logger.info(event.getType());

        super.onBrowserEvent(event);
    }

...但由于某些原因,此代码从不发送事件。新的 MouseOut 事件未在控制台中记录,并且 onHovering 样式未更改。不抛出异常。

为什么我不能触发事件?有没有其他方法可以解决这个问题?

GWT 2.5.1

4

2 回答 2

1

这是一个已知问题:https ://code.google.com/p/google-web-toolkit/issues/detail?id=2228

实际上,自定义按钮几个问题,如果可能,我们鼓励您使用Button(or SubmitButtonor ResetButton) 和 CSS;或者可能TextButton(或自定义的基于单元的ButtonBase子类)。
ToggleButton可能是一个例外,因为它没有真正的等价物,除了一个复选框。

于 2013-09-18T13:13:16.343 回答
0

最后我让它工作了。请注意 Thomas Broyer 的回答更广泛。

@Override
/**
 * In case onClick opens dialog, mouseOutEvent is not issued, thus preventing the button
 * from removing the onHovering styles. Firing that event manually onBlur.
 */
public void onBrowserEvent(Event event)
{
    if (DOM.eventGetType(event) == Event.ONBLUR)
    {
        NativeEvent mouseOutEvent = Document.get().createMouseOutEvent(1, 0, 0, 0, 0, false, false, false, false, NativeEvent.BUTTON_LEFT, getElement().getParentElement());
        getElement().dispatchEvent(mouseOutEvent);
        super.onBrowserEvent(Event.as(mouseOutEvent));
    }
    super.onBrowserEvent(event);
}
于 2013-09-19T14:17:02.137 回答