当鼠标离开网格时需要捕获MouseOutEvent
。试过这个:
grid.addHandler(new MouseOutHandler() {
@Override
public void onMouseOut(MouseOutEvent event) {
...
}
}, MouseOutEvent.getType());
但它会触发网格中的每个单元格。有什么帮助吗?
答案 0 :(得分:0)
首先,请改用addDomHandler
。
grid.addDomHandler(new MouseOutHandler() {
@Override
public void onMouseOut(MouseOutEvent event) {
...
}
}, MouseOutEvent.getType());
区别在于addHandler没有将事件连接到dom,但addDomHandler
确实如此。这个似乎并不总是需要,因为一旦事件连线,就不需要再做了,但作为一个好的做法,每次你向一个小部件添加一个dom事件处理程序时,你应该< em>始终使用addDomHandler
(或直接致电sinkEvents
等)。
好的,真正的问题是,有太多的事件正在发生,而不仅仅是一般的'鼠标离开网格'事件。
要处理此问题,请检查事件的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());
答案 1 :(得分:0)
解决方案来自jQuery通过JSNI:
private native void addMouseLeaveHandler(Element element) /*-{
$wnd.$(element).mouseleave(function(){
....
});
}-*/;