Переопределение метода JS focus () в IE 8 с ASPX и DEVExpress ... - PullRequest
1 голос
/ 26 января 2012

У меня такая ситуация - на нашем ASPX-сайте используется DEVExpress, только на IE 8 (оригинальный, а не IE 9 в режиме IE 8) на странице входа у нас постоянно возникает ошибка:

Can't move focus to the control because it is invisible, not enabled, or of a type that does not accept the focus.

И так - я исследовал и обнаружил, что что-то пытается сфокусировать то, что не видно.Поэтому я попробовал это решение - переопределив метод focus ().Вот краткий пример HTML-страницы:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>AccuLynx</title>
    <script type="text/javascript">
      HTMLInputElement.prototype.focusCpy = HTMLInputElement.prototype.focus;
      HTMLInputElement.prototype.focus = function () {
        if( this.style.display != 'none' && this.style.visibility != 'hidden' && !this.disabled && this.type != 'hidden' ) {
          HTMLInputElement.prototype.focusCpy.apply(this, arguments);
        }
      }
    </script>
  </head>
  <body>
    <input type="submit" id="my_link" style="display:none;" value="dfsdfd" />
    <script type="text/javascript">
      document.getElementById('my_link').focus();
    </script>
  </body>
</html>

И тогда на тестовой странице все выглядит хорошо, а на реальном сайте - нет.

Код JS - одна из первых вещейэто выполняется - в начале второго файла JS (первый - плагин JQuery) - но это не работает.

Любой совет приветствуется.

1 Ответ

3 голосов
/ 28 января 2012

Я нашел решение :) ... изменил код JS на этот:

  HTMLInputElement.prototype.focusCpy = HTMLInputElement.prototype.focus;
  HTMLInputElement.prototype.focus = function () {
    if( this.style.display != 'none' && this.style.visibility != 'hidden' && !this.disabled && this.type != 'hidden' && this.style.width != '0px' && this.style.width != '0%' && this.style.width != 0 ) {
      HTMLInputElement.prototype.focusCpy.apply(this, arguments);
    }
  }

Или другими словами - я добавил проверку ширины элемента, потому что через некоторое время я вспомнил, что этот нелепый браузер - IE - очень часто отображает некоторые элементы с шириной и высотой 0px.

А теперь работает :) 1006 *

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