2010-03-23 2 views
1

У меня есть тег html <div id="test"><input type="button" value="OK" /></div>.GWT Button EventListener не активирован

я использовал:

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

Я не выполняется, но никаких действий.

Update:

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"/> </дел > HTML тегов. – msaif

+0

У меня есть div id = "test" input type = "button" value = "OK" в теге html. , но никаких действий – msaif

+0

Просто потому, что вы выбрали виджет, это не значит, что вы «магически» получаете обработчиков. Вы должны убедиться, что добавленный вами виджет в Root правильно реализует интерфейс HasClickHandlers. Если вы добавите весь свой код, это поможет. –

ответ

2

Кнопка виджет GWT является button тег, а не input тег. Это означает, что вы не можете использовать виджет кнопки GWT в этом случае. Чтобы заставить его работать, вам нужно создать собственный виджет, который может быть основан на виджетах 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 для вашего пользовательского ввода виджета. См. Реализацию виджета Button метода te wrap, это то же самое, конечно же, для создания самого виджета.

1

Вы не можете просто взять кнопку html и попробовать добавить к ней обработчики кликов. Вам нужно создать кнопку с помощью gwt-кода. Попробуйте:

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

А потом:

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