2010-10-20 2 views
5

Comment ajouter un gestionnaire d'événements sur tous les éléments div avec GWT? J'ai essayé le code suivant mais les alertes de fenêtre ne sont pas mis le feu vers le haut (mais « etvoila » classe est mis en place):GWT: Ajouter un gestionnaire d'événements sur tous les éléments div

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"); 
    } 
    } 
} 

Quel est le problème dans cette méthode?

Répondre

10

On dirait que vous n'êtes pas sélectionné pour afficher les événements dont vous souhaitez que l'écouteur soit averti. Dans ce cas, par exemple, j'ajouterais ce qui suit dans initDiv à l'élément ou aux enfants concernés.

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

Comment utiliser votre solution dans le code? Je ne peux pas le faire fonctionner. – djondal

+0

Ajoutez ce qui suit avant la ligne "DOM.setEventListener (castedElem ..." : DOM.sinkEvents (castedElem, Event.ONCLICK | Event.ONMOUSEOUT | Event.ONMOUSEOVER); –

+0

Vous devez ajouter elem à com.google. gwt.user.client.Element –

2

De même à this question, vous pouvez l'envelopper dans un 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!"); 
    } 
    }); 
} 
+0

Le code compile (en corrigeant get (i) à getItem (i)), mais lors de l'exécution, l'erreur suivante est renvoyée java.lang.AssertionError: Un widget qui a un widget parent existant peut ne pas être ajouté à la liste de détachement à l'adresse com.google.gwt.user.client.ui.Label.wrap (Label.java:79). Est-il vraiment possible de placer cet élément dans un libellé? – djondal

Questions connexes