来自 Sencha GXT Grid 的 MouseOutEvent?

MouseOutEvent from Sencha GXT Grid?

需要在鼠标离开网格时捕获 MouseOutEvent。试过这个:

grid.addHandler(new MouseOutHandler() {
    @Override
    public void onMouseOut(MouseOutEvent event) {
        ...
    }
}, MouseOutEvent.getType());

但它会在网格中的每个单元格上触发。有帮助吗?

首先,改用addDomHandler

grid.addDomHandler(new MouseOutHandler() {
    @Override
    public void onMouseOut(MouseOutEvent event) {
        ...
    }
}, MouseOutEvent.getType());

不同之处在于 addHandler 不会将事件连接到 dom,但 addDomHandler 会。这个 似乎 并不总是需要的,因为一旦事件被连接起来,就不需要再次完成,但作为一个好习惯,每次你添加一个 dom 事件处理程序对于小部件,您应该始终使用addDomHandler(或直接调用sinkEvents等)。


好吧,真正问的问题是太多的事件正在发生,而不仅仅是一般的 'did the mouse leave the grid' 事件。

要处理这个问题,请检查事件的 eventTarget 是否是网格自己的元素。您会收到很多事件,因为您收到了网格内每个元素的所有 mouseout 事件,但只需要将其过滤到您感兴趣的特定事件即可。

这看起来像这样:

grid.addDomHandler(new MouseOutHandler() {
    @Override
    public void onMouseOut(MouseOutEvent event) {
        //check event target of the event
        Element target = (Element) event.getNativeEvent().getEventTarget();
        if (grid.getElement().equals(target) {
            // the mouse has left the entire grid
            // ...
        }
    }
}, MouseOutEvent.getType());

解决方案来自 jQuery 通过 JSNI:

private native void addMouseLeaveHandler(Element element) /*-{
        $wnd.$(element).mouseleave(function(){
             ....
        });
    }-*/;