Как узнать, какой элемент GWT имеет фокус? - PullRequest
5 голосов
/ 20 января 2012

Я хотел бы выяснить, в GWT, какой элемент в настоящее время имеет фокус. В основном я работал над виртуальной клавиатурой в нашем приложении. Все клавиши работают нормально, кроме клавиши табуляции. Если я получу выделенный элемент, я смогу определить код клавиши табуляции.

В javascript и jquery мы можем получить это используя document.activeElement. Надеюсь, что какое-то тело поможет мне добиться этого.

Помощь будет оценена.

Ответы [ 4 ]

7 голосов
/ 27 января 2012

Тот факт, что он не поддерживается во всех браузерах, важен, только если ваше приложение предназначено для всех браузеров.activeElement в настоящее время поддерживается довольно многими браузерами Почему в GWT нет isFocused ()? .

Мне нужно нечто подобное, мне нужно было узнать из виджета, имеет ли он фокус.Я сделал следующее:

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

Мне нужно было передать текущий элемент, чтобы получить нужный документ, просто вызов

document.activeElement;

не дал мне нужный мне документ.Скорее всего, вы могли бы сделать то же самое, но передать другой элемент (возможно, элемент RootPanel?) И вернуть элемент в фокусе, а не bool.

protected native Element elementInFocus(Element element) /*-{
   return element.ownerDocument.activeElement;
}-*/; 
1 голос
/ 20 января 2012

document.activeElement работает не во всех браузерах, поэтому в GWT его нет. Вы можете использовать обработчики фокуса и размытия, чтобы отслеживать, какой элемент имеет его.

0 голосов
/ 27 января 2016

Теперь мы можем использовать библиотеку Элементалей для этого.

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

точная функция будет

elemental.client.Browser.getDocument().getActiveElement()
0 голосов
/ 03 ноября 2014

Краткий шаблон:

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...