Почему этот javascript focus () не работает?
У меня есть индекс.html, который имеет огромную форму в нем. Форма представлена этим javascript:
byId("p").value = page;
byId("nav_container").focus();
document.forms["nav_form_main"].submit();
фокус не здесь...
Я хочу, чтобы браузер сосредоточился на определенной части страницы (почти вверху).
любые советы, что делать?
PS: Я попытался поместить Фокус после submit(), там же проблема.
спасибо
4 ответов
убедитесь, что элемент, который вы хотите сфокусировать, имеет атрибут tabindex="-1"
, в противном случае этот элемент не является фокусируемым.
<div id="myfocusablediv" tabindex="-1"></div>
когда вы устанавливаете tabindex=-1 для элемента, он позволяет ему получить focus () через javascript. Если вместо этого вы хотите, чтобы он фокусировался через элементы табуляции, вы должны установить атрибут tabindex в 0.
вот что я делаю, когда хочу заставить определенный элемент формы сосредоточиться:
/**
* focuses on a form field element even if it has tabIndex
* @param {DOM object} item [description]
*/
function formItemFocus( item ){
if( !item ){
console.warn('no focusable item: ', item)
return;
}
var savedTabIndex = item.getAttribute('tabindex');
item.setAttribute('tabindex', '-1');
item.focus();
item.setAttribute('tabindex', savedTabIndex);
}
эта маленькая функция просто устанавливает поле формы tabindex
to -1
Итак, DOM focus()
метод может повлиять и сразу же возвращает его к исходному значению.
как только вы отправляете форму, любой фокус становится неактуальным. Документ меняет местоположение на действие формы, и фокус все равно теряется.
похоже, вы хотите установить фокус после submit, в этом случае сделайте это в событии onload:
window.onload = function WindowLoad(evt) {
byId("nav_container").focus();
}
как упоминалось другими, если "nav_container"не является полем ввода, он также не будет работать и для прокрутки до этой позиции используйте именованный якорь.. добавить такой якорь перед элемент:
<a name="nav_container_anchor" />
тогда есть такой код JS для прокрутки до этого места:
document.location = "#nav_container_anchor";
вам нужен атрибут tabindex="0"
чтобы иметь возможность сосредоточиться (работает для меня) : tabindex="-1"
удалите элемент из последовательности вкладок страницы (например, он больше не фокусируется на клавиатуре).
- -1 по-прежнему фокусируется в некоторых случаях, но не с помощью клавиатуры (клавиша tab),
- 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