我有一堆动态生成的TextBox。在创建步骤中,我为它们分配ID属性。 e.g。
id = ...
Button b = new Button();
b.setText("add textbox");
b.addClickHandler(new Clickhandler() {
Textbox tb = new TextBox();
tb.getElement().setId(Integer.toString(id));
tb.setText("some text");
}
id += 1;
我需要稍后通过他们的ID访问它们,但我不能这样做。 我试图使用DOM对象来获取一个小部件,但它产生了一个异常:
String id = "some id";
Element el = DOM.getElementById(id);
String value = el.getAttribute("value"); - this line produces an exception.
我也尝试过使用el.getInnerText,el.getNodeValue - 没有运气。我在chrome调试器中看到 - 文本框没有'value'属性。
答案 0 :(得分:10)
您可以通过这种方式获取与元素关联的小部件:
public static IsWidget getWidget(com.google.gwt.dom.client.Element element) {
EventListener listener = DOM
.getEventListener((com.google.gwt.dom.client.Element) element);
// No listener attached to the element, so no widget exist for this
// element
if (listener == null) {
return null;
}
if (listener instanceof Widget) {
// GWT uses the widget as event listener
return (Widget) listener;
}
return null;
}
答案 1 :(得分:4)
由于您是在gwt java代码中构建文本框,为什么不将它们放入地图并稍后访问它们?
答案 2 :(得分:1)
要记住的一件事是HTML / DOM中属性和属性之间的区别。在您的示例中,“value”是一个属性。你可以试试Element#getPropertyString。过去,属性和属性可以互换使用,但在现代浏览器中已不再适用。