GWT - 单击后在文本框中选择全部

时间:2014-05-29 23:49:38

标签: java javascript dom gwt java-native-interface

在我的GWT项目中,我有一个Element desc,用TextArea表示。我需要在用户点击它时选择所有文本。当用户单击元素时,JNI函数selectAll()被正确执行。但是,它不会选择文本。请帮忙!

final Element desc = StoryView.getInstance().getDescription();
DOM.sinkEvents((com.google.gwt.user.client.Element) desc, Event.ONCLICK);
DOM.setEventListener((com.google.gwt.user.client.Element) desc, new EventListener(){        
        @Override
        public void onBrowserEvent(Event e) {
            switch (DOM.eventGetType(e)) {
                case Event.ONCLICK:
                  selectAll();
                  break;
            }               
        }
    });
}

private native void selectAll() /*-{
    var desc = @com.gw.myproj.client.story.StoryView::DESC; 
    $wnd.$("." + desc).focus();
    $wnd.$("." + desc).select();
}-*/;

1 个答案:

答案 0 :(得分:1)

只需在JSNI中使用JavaScript的setSelectionRange方法。

private native void selectAll(Element element) /*-{
    element.setSelectionRange(0, element.value.length);
}-*/;

final Element desc = Document.get().createTextInputElement();
DOM.sinkEvents((com.google.gwt.user.client.Element) desc, Event.ONCLICK);
DOM.setEventListener((com.google.gwt.user.client.Element) desc, new EventListener() {
    @Override
    public void onBrowserEvent(Event e) {
        switch (DOM.eventGetType(e)) {
            case Event.ONCLICK:
                selectAll(desc);
                break;
        }
    }
});

注意:无需致电focus,因为当您点击它时,它会自动聚焦。