Почему focus() не выбирает мой контейнер div?
У меня есть index.html, в котором есть JavaScript:
byId("p").value = page;
byId("nav_container").focus();
document.forms["nav_form_main"].submit();
Фокусная часть здесь не работает.
Я хочу, чтобы браузер сосредоточился на определенной части страницы (почти сверху).
Я попытался поставить фокус после submit(), та же проблема там.
Ответы
Ответ 1
убедитесь, что элемент, который вы хотите сфокусировать, имеет атрибут tabindex="-1"
, иначе этот элемент не будет сфокусирован.
Например
<div id="myfocusablediv" tabindex="-1"></div>
Когда вы устанавливаете tabindex = -1 для элемента, он позволяет получить фокус() через javascript. Если вместо этого вы хотите получить фокус через табуляцию через элементы, тогда вы должны установить атрибут tabindex равным 0.
Ответ 2
Вот что я делаю, когда хочу заставить определенный элемент формы иметь фокус:
function setFocusFixed( elm ){
if( !input ) return;
var savedTabIndex = elm.getAttribute('tabindex')
elm.setAttribute('tabindex', '-1')
elm.focus()
elm.setAttribute('tabindex', savedTabIndex)
}
// DEMO:
var buttons = document.querySelectorAll('button'),
input = document.querySelector('input');
buttons[0].addEventListener('click', ()=>input.focus())
buttons[1].addEventListener('click', ()=>setFocusFixed(input))
<input placeholder='some input' tabindex='2' />
<button>Set focus on input</button>
<button>Set focus on input - fixed</button>
Ответ 3
После отправки формы любой фокус становится неактуальным. Документ изменяет местоположение на действие формы и фокус все равно теряется.
Похоже, вы хотите установить фокус после submit, в этом случае сделайте это в событии onload:
window.onload = function WindowLoad(evt) {
byId("nav_container").focus();
}
Как уже упоминалось другими, если "nav_container" не является полем ввода, он также не будет работать и для прокрутки к этой позиции использует именованный якорь.. добавьте такой привязку перед элементом:
<a name="nav_container_anchor" />
Затем, чтобы этот JS-код прокручивался до этого местоположения:
document.location = "#nav_container_anchor";
Ответ 4
Вам нужен атрибут tabindex="0"
чтобы иметь возможность фокусироваться (работает для меня): tabindex="-1"
удалить элемент из последовательности вкладок страницы (он больше не фокусируется, например, с помощью клавиатуры).
- -1 все еще может фокусироваться в некоторых случаях, но не с помощью клавиатуры (клавиша табуляции),
- 0 можно фокусировать в автоматическом порядке
- Любое другое положительное число определяет порядок фокусировки элементов
https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html
https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex