如何找出哪个GWT元素具有焦点?

6

我想在GWT中找出当前具有焦点的元素。我们的应用程序中正在开发虚拟键盘,除了Tab键外,所有按键都可以正常工作。如果我获取了有焦点的元素,那么我就可以解决Tab键代码的问题。

在javascript和jquery中,我们可以使用document.activeElement来实现这一点。希望有人能帮助我找到正确的方法来实现。

将不胜感激。

4个回答

7

如果您的应用程序面向所有浏览器,则“不支持所有浏览器”这一事实非常重要。activeElement目前被许多浏览器支持。为什么GWT没有isFocused()函数?

我需要类似的功能,即在小部件内部知道它是否具有焦点。我做了以下操作:

protected native boolean hasFocus(Element element) /*-{
   return element.ownerDocument.activeElement == element;
}-*/; 

我需要传递当前元素以获取正确的文档,只需调用

document.activeElement;

他没有给我需要的文件。你可能可以做同样的事情,但传入不同的元素(比如RootPanel元素?),并返回处于焦点状态的元素而不是布尔值。

protected native Element elementInFocus(Element element) /*-{
   return element.ownerDocument.activeElement;
}-*/; 

3
你应该在JSNI中使用"$doc"代替"document",同样也适用于"$wnd"代替"window"。 - Henrik Paul

1

document.activeElement 在某些浏览器中无法正常工作,因此 GWT 不支持该功能。您可以使用焦点和失焦处理程序来跟踪哪个元素具有焦点。


好的。谢谢您的回复。如果您有任何关于获取活动元素的focushandlers示例,能否分享一下? - Kiran
哦,没关系,但如果你找到了任何解决方案,请与我们分享。我们也会尽最大努力在更短的时间内找到解决方案 :-)。感谢您的指导。 - Kiran
2
尝试使用焦点和模糊处理程序,这似乎并不困难。你需要做的就是在一个变量中维护当前选定的元素(在焦点上设置,在模糊时重置)。 - milan
@Matrix 希望这个示例代码对其他人有用,因为似乎对你来说已经太晚了。 - Renato

1

短模板:

public class IntBox extends com.google.gwt.user.client.ui.IntegerBox {

private boolean focused=false;

public IntBox(){

        addFocusHandler(new FocusHandler() {

            @Override
            public void onFocus(FocusEvent event) {
                focused=true;
            }
        });

        addBlurHandler(new BlurHandler() {

            @Override
            public void onBlur(BlurEvent event) {
                focused=false;
            }
        });

    }

    public boolean isFocused() {
        return focused;
    }

}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接