Как получить значение текстового поля рядом с кнопкой с запросом 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);
    }
  });
Другие вопросы по тегам