Почему вкладка в сетку DojoX приводит к ошибке JavaScript «Не удается переместить фокус на элемент управления»? - PullRequest
0 голосов
/ 26 ноября 2008

Задача
У меня есть несколько компонентов 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          
    }
  ];

Ответы [ 10 ]

7 голосов
/ 26 ноября 2008

Запрет вкладок может нарушить работу слабовидящих пользователей, просматривающих ваш сайт с помощью программы чтения с экрана.

4 голосов
/ 26 ноября 2008

Если ввод Y не принимает пользовательский ввод, не делайте его полем ввода!

Если вы просто используете это для отображения значения, используйте вместо него стиль <span> или <div>.

3 голосов
/ 26 ноября 2008

Я бы лично подумал, что этот тип поведения немного раздражает. Почему вы запрещаете пользователю сфокусироваться на этом поле?

Лучшим решением было бы скрыть / отключить поле, пока оно не будет готово для ввода данных в него. У вас также должен быть текст, объясняющий, почему поле отключено.

Изменить: Сообщение об ошибке, которое вы опубликовали, имеет некоторые результаты в Google, но, похоже, может быть любое количество проблем, это http://www.francoisfaubert.com/2008/03/06/cant-move-focus-to-control/ звучит так, как будто это возможно. Проверьте свой HTML-код, чтобы увидеть, есть ли на странице другие элементы управления с таким же идентификатором.

2 голосов
/ 26 ноября 2008

Вы можете установить Input-Z как отключенный элемент управления. Затем, когда пользователь вкладывает в Input-Y и заполняет его, измените Input-Z на enable. Как вы можете это сделать:

<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 />
1 голос
/ 26 ноября 2008

По поводу сообщения об ошибке: С Поддельный танк :

"Скорее всего, у вас есть конфликтующие идентификаторы в вашем документе. Кроме того, помните, что IE 7 и предыдущие версии одни, чтобы думать, что атрибут имени должен рассматриваться как идентификатор."

Итак, во-первых, это ошибка, специфичная для IE. Во-вторых, измените свои идентификаторы. Это похоже на то, что раньше поражало некоторые программы на основе html HP, и появилось, когда пользователи обновили IE6 до IE7.

Что касается вопроса об отключении фокуса - просто спрячьте в теге любые нежелательные входные данные с type = hidden, и они перестанут быть проблемой. Никогда не связывайтесь с вкладками людей - это одна вещь, которая улучшилась с html по сравнению с приложениями Windows.

Мораль сказки:

  • Делай это правильно
  • Microsoft - это чушь в Интернете
  • Не связывайтесь со стандартным поведением GUI
1 голос
/ 26 ноября 2008

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

TabIndex = "- 1"

по примеру:

<div id="mygrid" tabindex="-1"> <!-- Some stuff here --> </div>

Больше информации о негативных табиндексах: Знакомство с арией

Edit: Больше информации об ARIA: http://www.w3.org/WAI/intro/aria

1 голос
/ 26 ноября 2008

Вы должны обработать событие нажатия клавиш и прослушать символ 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; `` }

0 голосов
/ 25 апреля 2009

Решение
Первый элемент в макете 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          
    }
  ];
0 голосов
/ 26 ноября 2008

Дайте элементу компонента атрибут tabindex со значением -1

0 голосов
/ 26 ноября 2008
<input name="z" onfocus="this.blur()"/>
...