Ошибка только в поле ввода в Internet Explorer - PullRequest
6 голосов
/ 04 октября 2010

У меня странная ошибка, ну, у MSIE.

Кажется, что это происходит на всех основных версиях MSIE: 6, 7, 8 и 9 (!)

<!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-gb" lang="en-gb" ><head><title>test</title>

  <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
  <script type="text/javascript">
   jQuery(document).ready(function(){
    var test=jQuery('#in');
    test.focus(function(){
     if(test.val()=='empty')test.val('');
     test.attr('readonly',false);
    });
    test.blur(function(){
     if(test.val()=='')test.val('empty');
     test.attr('readonly',true);
    });
   });
  </script>

</head><body>

  <input type="text" value="empty" readonly="readonly" id="in"/>

</body></html>

Позвольте мне объяснить, как работает эта система и что происходит не так.

Когда пользователь щелкает (фокусирует) поле ввода, поле ввода следует сделать редактируемым (т. Е. Потерять флаг readonly). Затем, когда он покидает поле ввода (т. Е. Событие размытия), выполняется некоторая обработка (не показана в коде), и поле ввода выполняется только для чтения.

Это работает как чудо в большинстве браузеров (Firefox, Opera, на основе WebKit), но не в любой версии IE (включая 9 бета). Проблема в том, что в IE пользователь должен дважды щелкнуть поле ввода.

В этот момент вы могли бы спросить, оставлено ли поле ввода только для чтения в первый раз? Нет. Я проверял это, javascript сообщает, что это редактируемое.

Простое исправление, просто запустите событие щелчка в поле ввода (чтобы смоделировать поведение двойного щелчка пользователя), нет? Нет, .click() и .focus() оба не выполнены. Понятия не имею, почему.

Редактировать: Знайте, что курсор появляется в текстовом поле, по крайней мере, заметно.

Важно: Люди, пожалуйста, по крайней мере, попробуйте код, прежде чем ответить!

Ответы [ 3 ]

8 голосов
/ 04 октября 2010

Я бы не сказал, что это ошибка.Если вы измените значение, вы также удалите текущий textRange.

Try test.select(), он должен вернуть курсор на вход.конец ошибки "недостаточно памяти".

2 голосов
/ 04 октября 2010

Я считаю, что readonly должно быть readOnly. Кажется странным, что вы бы переключили это свойство. Вы также можете попробовать удалить его

jQuery("#foo").removeAttr("readOnly"); //.removeAttr("readonly");
1 голос
/ 21 октября 2010

попробуйте это, я только что попробовал это, и это работает:

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