Подтвердить что ты не робот

Установите фокус клавиатуры на <div>

У меня есть следующий фрагмент кода:

<div id="listbox1div" style="z-index:95; background:white; overflow-y:auto; overflow-x:hidden; width:240; height:314px;">
<a id="focusLink2"></a>
<table id="ptObj_listbox1...

У меня есть страница, которая строит элементы <div> динамически (например, выше). Этот <div> отображает данные поверх главного экрана. Когда страница генерирует divs, я хотел бы установить фокус. Я не могу поместить функцию onLoad в тег body, поскольку я не знаю, когда будут созданы divs.

Тег

A <div> не может иметь фокус, установленный непосредственно на нем. Поэтому я положил пустой тег <a> с идентификатором, который я вызываю в следующей функции:

function setTableFocus(count){
        var flinkText = 'focusLink'+count;
       document.getElementById(flinkText).focus();
}

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

Когда я нажимаю на один из элементов таблицы (используя мышь). После этого начинает работать событие keydown. Мне бы хотелось, чтобы это было сделано, чтобы представить данные пользователю и автоматически управляться клавиатурой.

Есть ли у кого-нибудь предложения, как я могу это сделать?

4b9b3361

Ответ 1

вы можете сделать div focusable, если вы добавите атрибут tabindex.

см. http://snook.ca/archives/accessibility_and_usability/elements_focusable_with_tabindex

Значение tabindex может привести к некоторому интересному поведению.

  • Если задано значение "-1", элемент не может быть привязан к табуляции, но фокус может задаваться элементом программно (с использованием element.focus()).
  • Если задано значение 0, элемент можно сфокусировать с помощью клавиатуры и попадает в табулирующий поток документа.
  • Значения, превышающие 0, создают уровень приоритета, причем 1 является самым важным.

UPDATE: добавила простую демонстрацию в http://jsfiddle.net/roberkules/sXj9m/

Ответ 2

Функция, динамически генерирующая divs, будет иметь контекст, доступный для определения того, с каким div следует сфокусироваться, после последнего div вывести a script с помощью scrollTo (), чтобы сосредоточиться на желаемом div. Назначьте каждому div ID, чтобы вы могли выбрать его из набора.

Response.Write "
<script language='text/javascript'>
document.getElementById('div#').scrollIntoView();
</script>
"

Ответ 3

Вы не можете сфокусировать div. Вы имеете в виду фокус ввода?

Во всяком случае, вы можете включить короткий тег script, чтобы сфокусировать что-то прямо в HTML - просто поместите script сразу после div - или даже внутри div.

Ответ 4

Вы управляете функцией asp? Если да, то это было бы самым легким местом для установки фокуса. В противном случае вы можете прослушать событие DOMNodeInserted (обратите внимание: поддержка браузера может отличаться) и установите фокус на div (или его дочерние элементы) на основе соответствующих условий.

Ответ 5

Вы можете использовать getElementsByClassName

<div tabindex="0" class="to-focus">TEXT</div>
<script> document.getElementsByClassName('to-focus')[0].focus()</script>

Ответ 6

Вы имеете в виду, что хотите сфокусировать divs всякий раз, когда он сгенерирован? попробуйте выполнить поиск этих

http://api.jquery.com/focus/

и

http://api.jquery.com/live/

и для нажатия клавиши.

http://api.jquery.com/keypress/

afaik divs и другие элементы могут иметь фокус какого-то типа, например, в wikis, например..

http://en.wikipedia.org/wiki/JavaScript#Cross-site_vulnerabilities

и он будет автоматически прокручиваться там. Я просто не знаю, как это сделать.

а для динамически создаваемых divs и таблиц вы можете использовать функцию jquery live()

Ответ 7

Я решаю, что делать следующее:

<div tabindex="0" >
    <button onclick="element.parentNode.focus();"/>
</div>