2013-03-27 40 views
0

我有一個像這樣的自定義小部件,它基本上是一對文本框和按鈕以及它們。如何通過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。

+0

你能只得到了'Element'爲'Button'('按鈕#getElement'),然後得到了什麼('元素#getPreviousSiblingElement')的前一個同級元素?也許你必須走過不止一個以前的兄弟姐妹? – 2013-03-27 14:01:18

+0

GWT查詢對我來說似乎沒有得到以前的兄弟元素函數。 – nikhil 2013-03-27 16:08:43

+0

是的,gquery有'prev()'。你必須知道'VerticalPanel'雖然用'tr'和'td'封裝了你的小部件。請參閱下面的答案。 – 2013-03-27 21:35:48

回答

2

那麼,首先你必須知道VerticalPanel是如何渲染的,以便你可以找出dom中的文本框在哪裏。

VerticalPanel呈現爲表,每個插件被定位成一個結構:<tr><td>widget</td></tr>

你的情況,你可以使用closest()prev()讓您的按鈕以前tr

$(button).closest("tr").prev(); 

然後使用find()獲得前面tr

$(button).closest("tr").prev().find("input") 
以內的 input

因此,使用查找Widgets,在您的UI每個按鈕的代碼gquery能力可能看起來像:

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); 
    } 
    }); 
+0

謝謝,這看起來不錯,我會立即嘗試。 – nikhil 2013-03-28 05:03:51

相關問題