2010-03-26 2 views
96

Я знаю, что это не должно быть так сложно, но я не мог найти ответ на Google.Как очистить фокус в javascript?

Я хочу выполнить часть javascript, которая очистит фокус от любого элемента, на котором он находится, не зная заранее, какой элемент находится в фокусе. Он должен работать с firefox 2, а также с более современными браузерами.

Есть ли хороший способ сделать это?

+0

какой ясный фокус означает? - Это то же самое, что и размытие? – plodder

+3

Я хочу сделать так, чтобы ни один элемент в браузере не сфокусировался. – Andres

ответ

74

.focus(), а затем .blur() что-то еще произвольное на вашей странице. Поскольку только один элемент может иметь фокус, он переносится на этот элемент и затем удаляется.

+0

Есть ли способ сделать невидимый элемент с фокусом? – Andres

+1

Я не специалист по наилучшему способу сделать это; но вы, безусловно, могли бы позиционировать его вне экрана или вне границ стилизованного элемента 'overflow: clip'. Но вы можете просто использовать поле, которое уже существует на странице. Или создайте его для этой цели и снова удалите. –

+0

Я думаю, что установка фокуса на элемент за пределами экрана заставит прокручивать этот элемент. Однако вы можете создать невидимый элемент для этой цели. При этом некоторым браузерам может быть трудно удалить каретку. Просто blur(), вероятно, будет работать лучше. Вы все равно можете получить ключи с обработчиком событий keyup (keydown). –

93

Ответ: document.activeElement

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

Технически: document.activeElement.blur()

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

function onElementFocused(e) 
{ 
    if (e && e.target) 
     document.activeElement = e.target == document ? null : e.target; 
} 

if (document.addEventListener) 
    document.addEventListener("focus", onElementFocused, true); 
+0

Не работает в firefox 2.0. – Andres

+6

Если Firefox 2 с общим ресурсом браузера 0.66% - это прерыватель транзакций ... У меня есть исправление, которое находится в моем отредактированном ответе. – jps

+12

В 2013 году доля браузера Firefox 2 существенно меньше 0,66%, а простой 'document.activeElement.blur()' - лучший способ добиться этого эффекта. – chowey

2

dummyElem.focus() где dummyElem - скрытый объект (например, имеет отрицательный zIndex)?

0

Вы можете вызвать window.focus();

но перемещение или потеря фокуса будет мешать любому, кто использует клавишу табуляции, чтобы обойти страницу.

вы можете прослушивать код ключа 13 и отказаться от эффекта, если нажата клавиша табуляции.

30
document.activeElement.blur(); 

Неправильно работает в IE9 - он размывает все окно браузера, если активным элементом является тело документа. Лучше проверить на этот случай:

if (document.activeElement != document.body) document.activeElement.blur(); 
Смежные вопросы