Добавление обработчика кликов для HTML-элемента? - PullRequest
4 голосов
/ 05 мая 2010

У меня есть предварительно сгенерированная для меня страница с использованием html, она выглядит как прокручиваемый список div, что-то вроде:

<html>
  <div id="a">
     <div>Item A</div>
  </div>
  <div id="b">
     <div>Item B</div>
  </div>
</html>

Я хотел бы получить их в моем методе точки входа и добавить обработчик щелчков к каждому из них. Я не могу понять, как это сделать. У меня есть что-то вроде:

public void onModuleLoaded() {
    RootPanel rp1 = RootPanel.get("a");
    rp1.addClickHandler(...); // can't do this.
}

как я могу прослушать щелчок по одному из этих элементов в GWT? Есть ли способ, которым я могу просто установить глобальный обработчик кликов и просто наблюдать за идентифицированными объектами и фильтровать их? Мне не обязательно добавлять обработчик кликов для каждого элемента (и я думаю, что документы рекомендуют против этого, если у вас много элементов, требующих обработчиков кликов),

Спасибо

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 ноября 2013

Проблема с использованием wrap () заключается в том, что если родительский элемент уже является виджетом, перенос запрещен. Вы все еще можете это сделать и будете работать, но если вы запустите приложение в режиме разработки, утверждение потерпит неудачу, остановив приложение.

Правильный (но утомительный и, на мой взгляд, неполный) способ - что-то вроде

Element elem = DOM.getElementById(“billing-component”);
DOM.sinkEvents(elem, Event.ONCLICK | Event.ONMOUSEOUT | Event.ONMOUSEOVER);
DOM.setEventListener(elem, new EventListener() {
    @Override
    public void onBrowserEvent(Event event) {
        if (Event.ONCLICK == event.getTypeInt()) {
            …
        }
    }
});

Я знаю, что это выглядит не очень хорошо, и на самом деле это не так, потому что вы можете подключить только один слушатель к элементу и проверить тип события.

3 голосов
/ 05 мая 2010

Я не проверял это, но общая идея верна и достаточно проста для расширения более чем на один целевой элемент. Вы можете заранее сохранить элементы, возвращаемые DOM.getElementById (), чтобы все было быстро. Имейте в виду, что onPreviewNativeEvent () будет вызываться для каждого пользовательского события, поэтому держите его на свету.

Event.addNativePreviewHandler(new NativePreviewHandler() {
    public void onPreviewNativeEvent(NativePreviewEvent event) {
        if (Event.as(event).getTypeInt() == Event.ONCLICK &&
            DOM.isOrHasChild(DOM.getElementById("A"), Element.as(event.getEventTarget()))) {
            // Element 'A' was clicked.
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...