2016-02-19 5 views
1

Без учета производительности я всегда жестко возвращаю объект jquery, возвращаемый $(":focus"), эквивалентен $(document.activeElement).JQuery: фокус, когда браузер не сфокусирован

Однако, если вы входите в отладчик браузера и оцениваете $(":focus"), вы не получите никакого элемента, а $(document.activeElement) по-прежнему будет возвращать сфокусированный элемент. Я думал о какой-то проблеме эффекта наблюдателя, но то же самое верно, если вы устанавливаете фокус вне браузера.

Согласно jquery documentation, селектор фокусировки должен «Выбирает элемент, если он в данный момент сфокусирован». Поскольку нет упоминания о фокусе браузера, мне было интересно, было ли это ожидаемое поведение или если оно должно быть сообщено как ошибка.

Если вы хотите попробовать это поведение, я создал пример JsFiddle. Вы увидите текст, как реагирует $(":focus"), когда вы будете фокусироваться от ввода (в форме, на консоли или в другом приложении).

ответ

2

Посмотрите на источник селектора :focus:

"focus": function(elem) { 
    return elem === document.activeElement 
     && (!document.hasFocus || document.hasFocus()) 
     && !!(elem.type || elem.href || ~elem.tabIndex); 
} 

Так для того, чтобы элемент должен быть возвращен, elem должен равняться document.activeElement, документ должен иметь фокус, а элемент должен иметь type, href или tabIndex.

Два не эквивалентны


редактировать

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

+0

Где вы находите это? –

+0

в [исходном коде sizzle] (https://github.com/jquery/jquery/blob/master/external/sizzle/dist/sizzle.js) – billyonecan

+0

Я только что обновил пример скрипки, чтобы быть более конкретным о фокусе –

0

Как вы можете видеть здесь CSS :focus Selector

The: селектор фокус допускается на элементы, которые принимают события клавиатуры или другие входы пользователей.

И document.activeElement может содержать любой или почти любой элемент на странице

+0

css не имеет никакого отношения к этому – billyonecan

Смежные вопросы