Почему текстовые поля отключены в IE6 без причины? - PullRequest
0 голосов
/ 23 декабря 2009

Я сделал несколько изменений на этой огромной странице JSF, которая также полна Javascript. Я не знаю, какие изменения приводят к возникновению проблемы.

Проблема в том, что после выполнения некоторого Javascript все текстовые поля на странице становятся доступны только для чтения. Проблема не возникает ни в IE7, ни в Firefox. Я отладил весь javascript, ошибок нет! И ничто не говорит о том, что поля становятся доступными только для чтения, поскольку в IE7 все работает правильно.

Не знаете, в чем проблема, может ли это быть связано с CSS? или джаваскрипт? И почему это происходит только в IE6?

Примечание: «Не поддерживать IE6 не вариант»

Ответы [ 5 ]

1 голос
/ 06 января 2010

Все еще не уверен, что случилось с этой сборкой, но я был уверен, что все модификации Ajax, которые я сделал, были причиной проблемы.

Сценарий был такой:

  1. Заполнить текстовое поле1 (нажмите getValues1, затем нажмите Ajax для проверки)
  2. Заполнить текстовое поле2 (нажмите getValues2, затем нажмите «Проверить» для обоих значений)
  3. Заполнить текстовое поле3 (нажмите getValues3, затем нажмите «Подтвердить» для всех трех значений)

И в четвертый раз снова тот же сценарий. Страница была создана новичком в JSF, и она была очень большой. Я занял много времени на его рефакторинг. Но теперь это намного лучше, каждое текстовое поле все еще имеет Ajax getValues, но вместо того, чтобы проверять их после получения всех значений, я фильтрую разрешенные значения на сервере, отправляя выбранные критерии

Сценарий сейчас:

  1. Заполнить текстовое поле1 (нажмите getValues1 Ajax)
  2. Заполнить текстовое поле2 (нажмите getValues2 Ajax со значением 1 и получите только допустимые значения)
  3. ... и т. Д.

Проблема, похоже, в гоночных условиях Ajax, и в какой-то момент IE6 завис или застрял в тупике, я не уверен.

Извлеченный урок: «Один раз на рефакторинг может уйти неделя, но без каждой отдельной проблемы это займет больше времени»

1 голос
/ 23 декабря 2009

Хотя в некоторых ситуациях IE может содержать ошибки, я вполне уверен, что это не ошибка IE.

Как вы можете сказать, что поля только для чтения? Получаете ли вы какие-либо оптические подтверждения или просто вы больше не можете нажимать на них? В этом случае я поставлю вам пиво, которое представляет собой невидимый DIV или другой элемент макета, который из-за некоторых настроек CSS сжимается над полями ввода.

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

Если они действительно отключены , как в <input disabled>, вам нужно показать некоторый JavaScript или (лучше) ссылку.

0 голосов
/ 23 декабря 2009

Основываясь на других ответах здесь и некоторых ваших комментариях к ним, кажется, что на вашей странице есть функция JavaScript, которая устанавливает элементы для включения или отключения.

Чтобы помочь нам, мы должны увидеть ваш код. Вот что вы можете сделать сами, но это решит вашу проблему:

  1. Найдите ту функцию (или ЛЮБУЮ функцию), которая устанавливает элементы на вашей странице как отключенные или включенные.
  2. В зависимости от среды разработки, существуют разные способы сделать это, но каким-то образом добавить точку останова в функцию.
  3. Загрузить страницу.
  4. Всякий раз, когда вызывается эта функция, выполнение кода останавливается на этой функции. Всякий раз, когда он останавливается, убедитесь, что он должен быть вызван (и просмотрите стек вызовов).

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

0 голосов
/ 23 декабря 2009

Посмотрите, имеет ли HTML для страницы атрибут «disabled», установленный для этих элементов INPUT. Если это так, то javascript используется для включения элементов после загрузки страницы. Это довольно распространенный метод, позволяющий предотвратить преждевременную попытку пользователей взаимодействовать со страницей до загрузки всех сценариев.

Если это то, что происходит, то, вероятно, вы нарушили способ, которым скрипт распознает, какие элементы необходимо включить. Поскольку это происходит только в IE6, похоже, что скрипт может выполнять какую-то эзотерическую навигацию по DOM, которая прервалась в результате изменений в разметке или CSS.

К сожалению, это то, что вам придется отлаживать, возвращаясь к предыдущим версиям, пока вы не определите внесенные вами изменения, которые сломали страницу.

0 голосов
/ 23 декабря 2009

эм ... не поддерживает IE6 ??? ;)

Предложите отключить ваш CSS и посмотреть, исчезнет ли проблема. Мне не известны какие-либо теги CSS, которые могут отключить поле.

Кроме этого, отладка является единственным вариантом. Удалите все свои .js и добавьте их построчно, пока что-нибудь не сломается.

Нам, вероятно, будет трудно помочь вам, не увидев какой-то код.

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