GWT - SinkEvent ONCLICK не работает

1

У меня проблема, что я погрузил два события 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
onclick
gwt

1 ответ

1
Лучший ответ

Если вы создаете виджет с нуля (напрямую используя элементы 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;
        }
    }
});
  • 0
    Спасибо за ваш ответ, но событие ONCLICK все еще не запущено.
  • 0
    Кажется, что-то не так с вашим кодом. Сначала попробуйте это с примером кода. только один компонент добавлен в корневую панель.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню