gpt4 book ai didi

java - GWT SinkEvent 在 Firefox 上除外

转载 作者:行者123 更新时间:2023-11-30 11:15:01 25 4
gpt4 key购买 nike

我正在尝试在 <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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com