2010-03-23 38 views
1

我有一個<div id="test"><input type="button" value="OK" /></div> html標記。GWT Button EventListener未解僱

我用:

((HasClickHandlers)RootPanel.get("test").getWidget(0)).addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
    Window.alert('sss'); 
    } 
} 

我執行,但沒有采取行動。

更新:

package com.example.client; 
import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.event.dom.client.*; 
import com.google.gwt.user.client.*; 
import com.google.gwt.user.client.ui.RootPanel; 

public class ExampleWebApp implements EntryPoint { 
    public void onModuleLoad() { 
    ((HasClickHandlers) RootPanel.get("test").getWidget(0)).addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
     Window.alert("i got it"); 
     } 
    }); 
    } 
} 

HTML:

<table> 
    <tr> 
    <div id="test"> 
     <input type=button onClick="" value='click here'> 
    </div> 
    </tr> 
</table> 
+0

我有一個< DIV ID = 「測試」 > <輸入類型= 「按鈕」 值= 「OK」/ > </DIV > HTML標籤。 – msaif 2010-03-23 07:53:08

+0

我在html標記中有一個div id =「test」input type =「button」value =「OK」。 但不採取行動 – msaif 2010-03-23 07:53:58

+0

只是因爲你施放了這個小部件並不意味着你'神奇地'獲得了處理程序。 您必須確保您添加到Root的小部件正確實現了HasClickHandlers接口。 如果你添加你的整個代碼,將有所幫助。 – 2010-03-23 08:06:28

回答

2

GWT的按鈕組件是一個button標籤,而不是一個input標籤。這意味着在這種情況下你不能使用GWT Button小部件。要使其工作,您需要創建自己的小部件,該小部件可以基於小部件ButtonBase,但需要使用InputElement對象而不是ButtonElement進行初始化。

從html獲取標記的下一步是添加類似於大多數小部件中存在的靜態wrap方法。下面是它會在你的例子可以當input將是一個button標籤:

Button.wrap(RootPanel.get("test").getWidget(0).getElement()).addClickHandler(
    new ClickHandler() { 
     @Override public void onClick(ClickEvent event) { 
      Window.alert('sss'); 
     } 
    }); 

在你的情況下,你可以添加一個wrap方法您的自定義輸入控件。請參見te wrap方法的Button小部件實現,這是相同的,當然期望創建小部件本身。

1

你不能只是一個HTML按鈕,並嘗試添加點擊處理程序。您需要使用gwt代碼創建按鈕。嘗試:

<div id="test"></div> 

然後:

Button button = new Button("OK"); 
RootPanel.get("test").add(button); 
button.addClickHandler(new ClickHandler() {...});