GWT:在所有 div 元素上添加事件处理程序

5
如何在所有GWT div元素上添加事件处理程序? 我尝试了以下代码,但窗口警报没有触发(但“etvoila”类已设置):
  private NodeList<Element> pageDIVElements;
  public void initDiv() {
    MyDIVEventHandler handler = new MyDIVEventHandler();
    pageDIVElements = Document.get().getElementsByTagName("div");
    for (int i = 0; i < pageDIVElements.getLength(); i++) {
      Element elem = pageDIVElements.getItem(i);
      elem.addClassName("etvoila");
      com.google.gwt.user.client.Element castedElem = (com.google.gwt.user.client.Element) elem;
      DOM.setEventListener(castedElem, handler);
    }

class MyDIVEventHandler implements EventListener {
  private Element divElement;
  @Override
  public void onBrowserEvent(Event event) {

    Window.alert("Yeepee");
    if (event.equals(Event.ONMOUSEOVER)) {
      Window.alert("ONMOUSEOVER");
      divElement = Element.as(((NativeEvent) event).getEventTarget());
      divElement.setPropertyString("background-color", "#C6D4E6");
    } else if (event.equals(Event.ONMOUSEOUT)) {
      divElement = Element.as(((NativeEvent) event).getEventTarget());
      divElement.setAttribute("background-color", "");
    }else if (event.equals(Event.ONCLICK)) {
      divElement = Element.as(((NativeEvent) event).getEventTarget());
      divElement.setAttribute("background-color", "");
      Window.alert("ONCLICK");
    }
  }
}

在这个方法中有什么问题?
2个回答

10

看起来你忽略了要接收通知的事件的处理。例如,在这种情况下,我会在initDiv中添加以下代码来处理元素或相关子元素。

似乎你需要对你想要监听的事件进行事件绑定处理。例如,在这种情况下,我会在initDiv中添加以下代码来绑定元素或相关子元素的事件处理程序。

DOM.sinkEvents(elem, Event.ONCLICK | Event.ONMOUSEOUT | Event.ONMOUSEOVER);

在“DOM.setEventListener(castedElem…”这行代码前添加以下内容: DOM.sinkEvents(castedElem, Event.ONCLICK | Event.ONMOUSEOUT | Event.ONMOUSEOVER); - Gerhard Davids

2

这个问题类似,您可以将其包装在Label中。

NodeList<Element> elems = Document.get().getElementsByTagName("div");
for (int i = 0; i < elems.getLength(); i++) {
  Element elem = elems.get(i);
  Label l = Label.wrap(elem);
  l.addClickHandler(new ClickHandler() {
    @Override
    public void onClick(ClickEvent event) {
      Window.alert("yay!");
    }
  });
}

代码编译成功(当更正get(i)为getItem(i)时),但在执行时抛出以下错误 java.lang.AssertionError:一个具有现有父部件的部件不能添加到分离列表中 在com.google.gwt.user.client.ui.Label.wrap(Label.java:79)处。真的可以将此元素包装成标签吗? - djondal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接