У меня проблема, что я погрузил два события ONMOUSEOVER
и ONCLICK
. Моя проблема в том, что ONMOUSEOVER
но ONCLICK
вообще не уволен !!
Вот мой пример кода
LIElement elem = Document.get().createLIElement();
DOM.sinkEvents(elem, Event.ONCLICK | Event.ONMOUSEOVER);
DOM.setEventListener(elem, new EventListener() {
@Override
public void onBrowserEvent(Event event) {
if (Event.ONCLICK == event.getTypeInt()) {
//Not reaching this code block at all !!
}
if (Event.ONMOUSEOVER == event.getTypeInt()) {
//Everything is working fine here
}
}
});
Этот код отлично работает в другой части системы, и я динамически генерирую LIElements, но я не думаю, что это проблема.
Может быть, это связано с подключением браузеров или DOM-рендерингом?
Любая помощь будет оценена. Я преследую это с двух дней.
Если вы создаете виджет с нуля (напрямую используя элементы DOM, а не просто создавать Composite), настройка для обработки событий немного нечетна. Как правило, это выглядит примерно так:
class MyWidget extends Widget {
public MyWidget() {
setElement(DOM.createDiv());
sinkEvents(Event.ONCLICK);
}
public void onBrowserEvent(Event evt) {
switch (DOM.eventGetType(evt)) {
case Event.ONCLICK:
// Do something insightful.
break;
}
}
}
Для подробного описания смотрите
Нижеприведенный пример кода отлично работает в Firefox и Chrome (не проверен для других).
final Element desc = Document.get().createLIElement();
SpanElement spanElement = Document.get().createSpanElement();
spanElement.setInnerHTML("Hello");
desc.appendChild(spanElement);
DOM.sinkEvents((com.google.gwt.user.client.Element) desc, Event.ONCLICK | Event.ONMOUSEOVER);
DOM.setEventListener((com.google.gwt.user.client.Element) desc, new EventListener() {
@Override
public void onBrowserEvent(Event e) {
switch (DOM.eventGetType(e)) {
case Event.ONCLICK:
System.out.println("click");
break;
case Event.ONMOUSEOVER:
System.out.println("hover");
break;
}
}
});