Kiran
Kiran

Reputation: 20313

How do i find out which GWT element has focus?

I would like to find out, in GWT, which element currently has focus. Basically i was working on virtual keyboard in our application. All keys are working fine except tab key. If i get focused element then i can work out the tab key code.

In javascript and jquery we can get this using document.activeElement. Hope some body will put me in right way to achieve this.

Help would be appreciated.

Upvotes: 6

Views: 8900

Answers (4)

simjee-z
simjee-z

Reputation: 21

We can now use the Elemental library to accomplish this.

http://www.gwtproject.org/articles/elemental.html

the exact function would be

elemental.client.Browser.getDocument().getActiveElement()

Upvotes: 0

user1817599
user1817599

Reputation: 11

Short template:

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;
    }

}

Upvotes: 1

RobRolls
RobRolls

Reputation: 508

The fact that it's not supported in "all browsers" is only important if your app is targeting all browsers. activeElement is currently supported by quite a few browsers Why is there no isFocused() in GWT?.

I needed something similar, I needed to know from inside a widget if it had focus. I did the following

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

I needed to pass in the current element to get the proper document, just calling

document.activeElement;

did not give me the document I needed. You could likely do the same but pass in the a different element (RootPanel element maybe?) and return the in focus Element rather than a bool.

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

Upvotes: 7

milan
milan

Reputation: 12420

document.activeElement doesn't work in all browsers so there's no support for that in GWT. You could maybe use focus&blur handlers to keep track which element has it.

Upvotes: 1

Related Questions