我有一个像这样的自定义小部件,它基本上是几个文本框和按钮。
<g:VerticalPanel>
<b:Label>Lower Limit</b:Label>
<b:TextBox ui:field="lowerLimit" addStyleNames="lowerLimitTextBox"></b:TextBox>
<b:Button icon="COPY" addStyleNames="copyAll copyAllLower">Copy To All</b:Button>
</g:VerticalPanel>
<g:VerticalPanel>
<b:Label>Upper Limit</b:Label>
<b:TextBox ui:field="upperLimit" addStyleNames="upperLimitTextBox"></b:TextBox>
<b:Button icon="COPY" addStyleNames="copyAll copyAllUpper">Copy To All</b:Button>
</g:VerticalPanel>在一个页面上有许多这样的小部件。当一个按钮被点击时,我希望能够选择它左边的文本框,并将该值复制到所有相应的小部件中。
我可以选择按钮,但不知道如何选择紧邻其左侧的文本框。有人能帮上忙吗。
我添加了jQuery-selectors标记,因为选择器可能类似于GwtQuery的选择器。
发布于 2013-03-28 05:33:29
首先,你必须知道VerticalPanel是如何呈现的,这样你才能知道文本框在dom中的位置。
VerticalPanel被呈现为一个表,并且每个小部件被定位到一个结构中:<tr><td>widget</td></tr>
在您的示例中,您可以使用closest()和prev()来获取按钮的上一个tr:
$(button).closest("tr").prev();然后使用find()获取前一个tr中的input
$(button).closest("tr").prev().find("input")因此,使用查找Widgets的gquery功能,UI中每个按钮的代码可能如下所示:
button.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
TextBox box = $(button).closest("tr").prev().find("input").widget();
for (TextBox b : $(".gwt-TextBox").widgets(TextBox.class) ) {
b.setValue(box.getValue());
}
}
});不过,如果你想使用gquery一次增强所有的按钮,那么一切都要简单得多:
$(".gwt-Button").click(new Function(){
public void f() {
String value = $(this).closest("tr").prev().find("input").val();
$(".gwt-TextBox").val(value);
}
});https://stackoverflow.com/questions/15658846
复制相似问题