2010-03-23 50 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() {...});