Проблема
У меня на странице есть несколько компонентов Dojo. Когда пользователь пытается перейти от компонента, подобного входу, к компоненту, подобному сетке, я получаю ошибку JavaScript «Невозможно переместить фокус для управления». База пользователей использует IE6.
Решение
Первый элемент в макете DojoX Grid не может быть скрыт. Если он скрыт, вы получите ошибку JavaScript «Невозможно переместить фокус для управления». Чтобы исправить это, я добавил строку #, которая отображается. См. ниже.
var gridLayout = [ new dojox.grid.cells.RowIndex({ name: "row #", width: 2, styles: "text-align: right;" }), { field: "ele_id", name: "Element ID", styles: "text-align:right;", width:5, hidden:"true" }, { field: "ele_nm", name: "Element Name", styles: "text-align:left;", width:8 } ];
Z не является полем ввода. У меня на странице есть несколько компонентов Dojo. Когда пользователь пытается перейти от компонента, подобного входу, к компоненту, подобному сетке, я получаю ошибку JavaScript «Невозможно переместить фокус для управления».



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны обработать событие нажатия клавиши и прослушать символ 9 (который является символом табуляции). Чтобы сделать событие недействительным, вы просто возвращаете false, когда пользователь нажимает символ 9.
function handleKeyDown(e)
{
var keynum;
var keychar;
var numcheck;
if (window.event) // IE
{
keynum = e.keyCode;
}
else if (e.which) // Netscape/Firefox/Opera
{
keynum = e.which;
}
return keynum != 9;
``
}
Вы также должны иметь дело с Shift-Tab, идущим в противоположном направлении.
<input name = "z" onfocus = "this.blur()"/>
Я думаю, что это может сильно раздражать пользователя: он попытается снова сфокусировать элемент, но фокус всегда переходит на другой элемент ...
Я согласен. Я просто пытаюсь ответить на вопрос.
Я лично считаю, что такое поведение немного раздражает. Почему вы запрещаете пользователю сосредотачиваться на этой области?
Лучшим решением было бы скрыть / отключить поле, пока оно не будет готово для ввода данных. У вас также должен быть текст, объясняющий, почему это поле отключено.
Обновлено: сообщение об ошибке, которое вы опубликовали, имеет некоторые результаты в Google, но похоже, что это может быть любое количество проблем, этот http://www.francoisfaubert.com/2008/03/06/cant-move-focus-to-control/ звучит так, как будто это может быть возможность. Проверьте свой HTML, чтобы увидеть, есть ли на странице другие элементы управления с таким же идентификатором.
прояснил вопрос выше. это для предотвращения перехода от поля ввода к компоненту сетки. какие еще способы вы бы предложили справиться с этим?
Что это за «сеточная составляющая»?
Я использую сетку - это компонент DojoX.
Не проблема с удостоверением личности. Да, погуглил неэффективно, поэтому я подумал, что попробую здесь.
Вы можете установить Input-Z как отключенный элемент управления. Затем, когда пользователь переходит на Input-Y и заполняет его, измените Input-Z на enabled. Как это сделать:
<input id = "Input-x" type = "text" />
<input id = "Input-y" type = "text" onChange = "document.getElementById('Input_Z').removeAttribute('disabled');" />
<input id = "Input-z" type = "text" disabled />
Предотвращение перехода на табуляцию может помешать слабовидящим пользователям, просматривающим ваш сайт с помощью программы чтения с экрана.
я прояснил проблему выше. Спасибо что подметил это. какими еще способами вы могли бы справиться с подобным?
Если ввод Y не принимает пользовательский ввод, не делайте его полем ввода!
Если вы просто используете это для отображения значений, используйте вместо этого стилизованные <span> или <div>.
Согласовано. Нет никаких оснований для того, чтобы в хорошо разработанном приложении требовалось отключать клавишу табуляции. Это все равно, что спрашивать "можно ли отключить кнопку возврата?" Вы просто этого не делаете. Это часть ожидаемого стандарта.
я привел плохой пример. проблема заключается в переходе от поля ввода к компоненту сетки, который не может с этим справиться. Я пытаюсь предотвратить появление ошибки JavaScript.
Присвойте элементу компонента атрибут tabindex со значением -1.
После ваших комментариев, разъясняющих проблему, я понимаю, что вам нужно, чтобы пользователь не мог сфокусировать элемент с помощью клавиши табуляции. Попробуйте добавить к элементу:
tabindex = "- 1"
например:
<div id = "mygrid" tabindex = "-1"> <!-- Some stuff here --> </div>
Подробнее об отрицательных индексах табуляции: введение в вай-арию
Редактировать: Подробнее о ARIA: http://www.w3.org/WAI/intro/aria
По поводу сообщения об ошибке: От Танк фейка:
"odds are you have conflicting ids in your document. Also, remember IE 7 and the previous versions are alone to think a name attribute should be treated like an id."
Итак, во-первых, это ошибка IE. Во-вторых, измените свои идентификаторы. Похоже, что это то, что раньше поражало некоторые программы HP на основе HTML, и появилось, когда пользователи обновились с IE6 до IE7.
Что касается вопроса об отключении фокуса - просто скройте любые нежелательные вводы с помощью type = hidden в теге, и они перестанут быть проблемой. Никогда не возитесь с табуляцией людей - это единственное, что улучшило HTML по сравнению с приложениями Windows.
Мораль сказки:
Решение
Первый элемент в макете DojoX Grid не может быть скрыт. Если он скрыт, вы получите ошибку JavaScript «Невозможно переместить фокус для управления». Чтобы исправить это, я добавил строку #, которая отображается. См. ниже.
var gridLayout = [ new dojox.grid.cells.RowIndex({ name: "row #", width: 2, styles: "text-align: right;" }), { field: "ele_id", name: "Element ID", styles: "text-align:right;", width:5, hidden:"true" }, { field: "ele_nm", name: "Element Name", styles: "text-align:left;", width:8 } ];
Зачем тебе это нужно ??? Если пользователь хочет перейти к какому-либо полю ввода, он должен иметь возможность, не так ли? Вы хотите запретить Любые навигацию в это поле или только на основе табуляции?