Ошибка только в поле ввода в 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() оба не смогли. Понятия не имею почему.

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

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

 Christian24 окт. 2010 г., 21:16
@Mager - Каким был солнечный день! Ты не согласен?
 Nick Craver04 окт. 2010 г., 16:59
Зачем вообще делать его доступным только для чтения, если клик делает его редактируемым?
 meagar21 окт. 2010 г., 21:21
Вот почему это был комментарий, а не ответ.
 Christian06 окт. 2010 г., 17:21
Вряд ли это является исправлением или конструктивным ответом.

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

Решение Вопроса

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

Пытатьсяtest.select() , он должен вернуть курсор на вход.

test.focus()

приведет к циклу, который завершится ошибкой «недостаточно памяти».

 Christian05 окт. 2010 г., 08:24
Хм, это сработало просто отлично!
 Christian05 окт. 2010 г., 08:17
Всем привет! Я попробую это как можно скорее. Однако я успешно использовал .focus (), так как я не получил такой ошибки. Но, как я уже сказал, это не сработало. О, это важно, знайте, что курсор на самом деле находится внутри поля ввода, по крайней мере, заметно. (отредактированный вопрос)
 eloone23 янв. 2014 г., 16:03
test.select() исправил проблему спасибо! ноtest.focus() не.

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

jQuery("#foo").removeAttr("readOnly"); //.removeAttr("readonly");
 Christian05 окт. 2010 г., 08:16
ммм? Похоже, что MSIE «только для чтения» меняет его на «только для чтения», но работает так же хорошо. Кроме того, это мимо моей проблемы.

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

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

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