Error de cuadro de entrada de solo lectura en Internet Explorer

Tengo un error extraño, bueno, MSIE sí.

Parece que está fallando en todas las versiones principales de MSIE: 6, 7, 8 y 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>

Permítanme explicar cómo funciona este sistema y qué está yendo mal.

Cuando el usuario hace clic (enfoca) en el cuadro de entrada, el cuadro de entrada debe hacerse editable (es decir, perder el indicador de solo lectura). Luego, cuando él / ella abandona el cuadro de entrada (es decir, evento de desenfoque), se realiza un procesamiento (no se muestra en el código) y el cuadro de entrada se realiza de solo lectura.

Esto funciona de maravilla en la mayoría de los navegadores (Firefox, Opera, basado en webkit), pero no en ninguna versión de IE (incluyendo 9 beta). El problema es que en IE, el usuario tiene que hacer clic en el cuadro de entrada dos veces.

En este punto, puede preguntarse si el cuadro de entrada se deja solo lectura la primera vez. No. Lo probé, javascript informa que es editable.

Solución fácil, simplemente active un evento de clic en el cuadro de entrada (para simular el comportamiento de doble clic del usuario), ¿no? No,.click() y.focus() ambos fallaron. No tengo idea de por qué.

Editar: Sepa que el cursor aparece en el cuadro de texto, al menos visiblemente.

Importante: ¡Gente, por favor al menos intenten el código antes de responder!

Respuestas a la pregunta(3)

Su respuesta a la pregunta