2010-10-20 16 views
5

जीडब्ल्यूटी के साथ सभी div तत्वों पर इवेंट हैंडलर कैसे जोड़ें? मैं निम्नलिखित कोड की कोशिश की लेकिन खिड़की अलर्ट निकाल दिया जाता है नहीं (लेकिन "etvoila" वर्ग की स्थापना की है):जीडब्ल्यूटी: सभी 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"); 
    } 
    } 
} 

क्या इस विधि में गलत क्या है?

उत्तर

10

ऐसा लगता है कि आप उन घटनाओं को डुबोने के लिए उपेक्षित हैं जिन्हें आप श्रोता को अधिसूचित करना चाहते हैं। इस मामले में उदाहरण के लिए मैं तत्व या प्रासंगिक बच्चों को initDiv में निम्नलिखित जोड़ दूंगा।

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

कोड में अपने समाधान का उपयोग कैसे करें? मैं इसे काम नहीं कर सकता। – djondal

+0

लाइन से पहले निम्नलिखित जोड़ें "DOM.setEventListener (castedElem ..." : DOM.sinkEvents (castedElem, Event.ONCLICK | Event.ONMOUSEOUT | Event.ONMOUSEOVER); –

+0

आपको कॉमफ़ोर्स को elem डालना होगा। gwt.user.client.Element –

2

इसी this question करने के लिए, आप इसे एक 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

कोड संकलित करता है (जब Item (i) प्राप्त करने के लिए प्राप्त (i) को सही करते समय), लेकिन निष्पादित करते समय, निम्न त्रुटि java.lang.AssertionError: एक विजेट जिसमें मौजूदा मूल विजेट हो सकता है com.google.gwt.user.client.ui.Label.wrap (label.java:79) पर अलग सूची में जोड़ा नहीं जा सकता है। क्या इस तत्व को लेबल में लपेटना वाकई संभव है? – djondal

संबंधित मुद्दे