java - GWT SinkEvent 在 Firefox 上除外

标签 java gwt browser onclicklistener

我正在尝试在 <li> 内的 anchor 元素上接收一个事件和 <li> 上的听众只是工作正常,但它不适用于任何其他元素的 anchor 。 它正在处理的奇怪事情 FireFox只有

html 输出是这样的:

<li>
    Some Text
</li> 
<li>
    Some Text<a class='myClass'>Anchor</a>
</li>

监听器的JAVA代码

this.eventListener = new EventListener() {
        @Override
        public void onBrowserEvent(Event e) {
            Element elem = e.getTarget();

            //This means we want to use the option selection 
            switch (e.getTypeInt()) {
                case Event.ONCLICK:

                    if (LIElement.is(elem) && !elem.hasClassName('myClass')) {
                        selectOption((LIElement) elem);
                    } else {
                        LIElement li = (LIElement) elem.getParentElement();
                        createContact(li);
                    }

                    break;
                case Event.ONMOUSEOVER:
                    //do something

                    break;
                case Event.ONMOUSEOUT:
                   //do something
                    break;
            }

        }//End of onBrowserEvent 
    };//End of event listener 

我正在使用它来创建元素:

LIElement li = Document.get().createLIElement();
AnchorElement createContactLI = Document.get().createAnchorElement();
createContactLI.addClassName(NEW_CONTACT_CLASS);
createContactLI.setInnerText("Add new contact");
createContactLI.setId("myID");
li.appendChild(createContactLI); 
ulPanel.appendChild(li); 

下沉事件:

Event.sinkEvents(ulPanel, Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT);
Event.setEventListener(ulPanel, this.eventListener);`

我尝试过的

  • 沉没事件的主播,没有成功
  • 将 anchorElement 包裹在 anchor 中并添加了 ClickHandler ,没用
  • 将 anchorElement 转换为 liElement ,没用
  • BTW 在处理 anchorElement 时不会触发断点
  • 也试过 CSS 和 z-indexing ,没用

我要做什么 - 将整个功能编写为小部件,这将花费我很长时间

非常感谢您的帮助

最佳答案

不要使用 com.google.gwt.user.client.Element,而是使用 com.google.gwt.dom.client.Element。我不知道您要将 ulPanel 添加到哪里。但以下代码有效:

import com.google.gwt.dom.client.AnchorElement;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
import com.google.gwt.dom.client.LIElement;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.VerticalPanel;

public class CustomWidget extends VerticalPanel{

    public CustomWidget() {
        DivElement ulPanel = Document.get().createDivElement();
        LIElement li = Document.get().createLIElement();
        AnchorElement createContactLI = Document.get().createAnchorElement();
        createContactLI.addClassName("myclass");
        createContactLI.setInnerText("Add new contact");
        createContactLI.setId("myID");
        li.appendChild(createContactLI); 
        ulPanel.appendChild(li); 

        Event.sinkEvents(ulPanel, Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT);
        Event.setEventListener(ulPanel, this.eventListener);

        this.getElement().appendChild(ulPanel);
    }

    EventListener eventListener = new EventListener() {
        @Override
        public void onBrowserEvent(Event e) {
            //This means we want to use the option selection 
            switch (e.getTypeInt()) {
                case Event.ONCLICK:
                    EventTarget eventTarget = e.getEventTarget();
                    Element elem = Element.as(eventTarget);
                    if (AnchorElement.is(elem) && "myclass".equals(elem.getAttribute("class"))) {
                        Window.alert("clicked anchor element");
                    } else {
                        LIElement li = (LIElement) elem.getParentElement();
                        Window.alert("clicked li element");
                    }

                    break;
                case Event.ONMOUSEOVER:
                    //do something

                    break;
                case Event.ONMOUSEOUT:
                   //do something
                    break;
            }

        }//End of onBrowserEvent 
    };//End of event listener 

}

关于java - GWT SinkEvent 在 Firefox 上除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634257/

相关文章:

java - 安全问题 : For REST URLs and Static HTMLs

java - QueueManager 未连接,出现异常 : MQJE001:

java - 阅读 gwt 中 ONPaste 事件的文本

java - SmartGwt SelectItem 以编程方式进行多重选择

browser - 如何使用 c# 或批处理文件更改默认浏览器

java - 原因:javax.persistence.PersistenceException:无法解析持久单元根URL

java - 如何检查一个字符串只包含数字和一个小数点?

java - 我的下载 Servlet 运行两次

html - IE7 是否有 "developer mode"或类似 Firefox/Chrome/Safari 的插件?

.net - vb 2008 网页浏览器替代品