捕获gwt InputElement的更改事件

时间:2013-05-31 09:00:24

标签: java gwt jquery-mobile input

在gwt上编程,应该有可能将一个更改事件附加到一个输入元素,就像这样在Java:

@UiField
InputElement mWorkCompleted;

并在.gwt.xml - 文件:

<input type="checkbox" name="workCompleted" ui:field="mWorkCompleted"
                class="custom" />

修改1:

当我阅读其余代码时,会遇到更多挑战:使用jQuery将其呈现为屏幕,这就是使用InputElement的原因。 Java文件的一部分:

@Override
public void setWorkCompleted(boolean completed) {
    mWorkCompleted.setChecked(completed);
    JQuery.create(mWorkCompleted).checkboxradio(JQuery.REFRESH);
}

如何实现这种简单的外观? jQuery版本1.8.1

3 个答案:

答案 0 :(得分:4)

您可以使用Event Api提供dom元素事件。

Event.sinkEvents(mWorkCompleted, Event.ONCHANGE);
        Event.setEventListener(mWorkCompleted, new EventListener() {

            @Override
            public void onBrowserEvent(Event event) {

            }
        });

答案 1 :(得分:0)

为什么不将您的UiField引用其具体类型?据我所知,它需要在上面的代码中输入CheckBox。然后,您可以使用以下推荐的方法将事件处理程序绑定到uibinder输入。

@UiHandler("mWorkCompleted")
void handleCheck(ValueChangeEvent<Boolean> evt)
{
    System.err.println("evt value "+evt.getValue());
}

答案 2 :(得分:0)

您可以通过已定义的面板或小部件(如

)添加此元素
yourWidget.add(new HTML("<input type = 'checkbox'/>"))

为您的小部件添加处理程序。 (更喜欢DOMHandler)。然后检查它的值如

            public void onClick(final ClickEvent event) {
            EventTarget eventTarget = event.getNativeEvent().getEventTarget();
            Node node = Node.as(eventTarget);

            if (Element.is(node)) {
            if ("".equalsIgnoreCase(elem.getAttribute("checked"))) {
                elem.setAttribute("checked", "on");
                    // Do something
                }
            else if ("on".equalsIgnoreCase(elem.getAttribute("checked"))) {
                elem.removeAttribute("checked");
                    // Do something
                }
        }