Javascript .focus проблема в IE для динамического контента - PullRequest
0 голосов
/ 15 апреля 2011

Синтаксис Javascript

for(i in x) { x[i].focus(); }

Это работает правильно в Mozilla и Chrome, но выдает ошибку в IE.

Ошибка отображается

Сообщение. Невозможно переместить фокус на элемент управления, поскольку он невидим, не активирован или имеет тип, который не принимает фокус.

Я попытался использовать блок try catch, как показано ниже

for(i in x) { try { x[i].focus(); } catch(err){ } }

Он работал правильно, но моя система имеет более 100 страниц и не знает, сколько раз я использовал .focus

Пожалуйста, помогите мне избавиться от этой проблемы IE.

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

Эта ошибка возникает, когда вы пытаетесь сфокусировать () элемент, который не может сфокусироваться (как говорится в ошибке). Чтобы избавиться от него, реализуйте метод, который выполняет необходимые проверки, прежде чем вызывать фокус на элементе. Э.Г.

function focusElement(el) {
  var canFocus = !el.disabled &&
                  el.style.display != 'none' &&
                  el.style.visibility != 'hidden';
  if (canFocus) el.focus();
  return canFocus;
}

... тогда ваш код будет выглядеть так:

for (i in x) focusElement(x[i]);

(Кстати, 'странно, что вы будете фокусировать () более одного элемента за раз, поскольку только последний элемент останется с фокусом.)

0 голосов
/ 15 апреля 2011

Это может быть связано с тем, что for (i in x) также возвращает все другие атрибуты объекта x.

Итак, если это массив, он также будет возвращать длину, и код попытается вызвать focus () для целого числа, которого не существует.

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

Итак: for (i in x) {if (x [i] .focus) {x [i] .focus (); }}

Вы также можете добавить попробовать / поймать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...