Как получить значение текстового поля рядом с кнопкой с запросом gwt
У меня есть такой виджет, это пара текстовых полей и кнопок вместе с ними.
<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.
1 ответ
Ну, во-первых, вы должны знать, как VerticalPanel
отображается так, чтобы вы могли выяснить, где находится текстовое поле в DOM.
VerticalPanel
отображается как таблица, и каждый виджет располагается в структуре: <tr><td>widget</td></tr>
В вашем случае вы можете использовать closest()
а также prev()
чтобы получить предыдущий tr
вашей кнопки:
$(button).closest("tr").prev();
Тогда используйте find()
чтобы получить input
внутри предыдущего tr
$(button).closest("tr").prev().find("input")
Таким образом, используя gquery способность найти Widgets
код для каждой кнопки в вашем пользовательском интерфейсе может выглядеть так:
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);
}
});