我正在优化以前使用各种嵌套面板来处理DIV和Spans的GWT应用程序。我将整个表生成为单个SafeHtml对象,然后将其分配到单个SafeHtml小部件中。
我现在希望能够在特定“单元格”跨度而不是整个表格上跟踪鼠标悬停/鼠标移除事件,但我不知道如何执行此操作。
如果我向HTML小部件本身添加一个处理程序,我将获得各种元素的事件。
答案 0 :(得分:6)
自2.0以来,有一种简单的方法可以做到这一点。
例如,如果HTML代码包含在某种窗口小部件(HTMLPanel或HTML)中,则可以在该窗口小部件上调用addDomHandler(<handler>,<eventtyoe>)
,这样您就可以从内部html接收事件。
例如,如果你在HTMLPanel中有一堆锚点,并且你想知道点击了哪一个,你可以这样做:
panel.addDomHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Element element= event.getNativeEvent().getEventTarget().cast();
if(element.getTagName().equals("A")) {
AnchorElement anchor = element.cast();
Window.alert("Anchor with href " + anchor.getHref() + " was clicked");
}
}
}, ClickEvent.getType());
由于您想要跟踪鼠标悬停/移出事件,您必须使用2个不同的dom处理程序,找出触发事件时所需的单元格,然后更改其状态。
答案 1 :(得分:-1)
解决这个问题的方法是:
DOM.getElementById(..)
或任何其他方法。查看Widget.getElement()
等。DOOM.sinkEvents(element,eventBits)
或DOM.sinkBitlessEvent(element,eventName)
并以位掩码的形式传递您想要接收的所需事件,例如Event.MOUSEEVENTS
或使用click
或{{等命名事件1}}如果使用第二种方法。在元素上设置和EventListener,通过这样调用touchstart
:
DOM.setEventListerner(element,eventListener)
只有您在步骤2中指定的事件才会被激活到EventListener,因此您只需处理这些事件。