Ошибка только в поле ввода в Internet Explorer

У меня странная ошибка, ну, у 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>

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

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

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

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

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

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

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

Ответы на вопрос(3)

Ваш ответ на вопрос