2010-10-04 4 views
6

Tengo un error extraño, bueno, MSIE sí.Error de la caja de entrada de solo lectura en Internet Explorer

parece que está fallando en todas las versiones 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> 

Voy a explicar cómo funciona este sistema y lo que va mal.

Cuando el usuario hace clic (enfoca) en el cuadro de entrada, el cuadro de entrada debe ser editable (es decir, perder indicador de solo lectura). Luego, cuando deja el cuadro de entrada (es decir, evento de desenfoque), se realiza algún procesamiento (no se muestra en el código) y el cuadro de entrada se hace de forma sencilla.

Esto funciona como un encanto 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 preguntar si la casilla de entrada se ha dejado solo de leer la primera vez? No. Lo probé, javascript informa que es editable.

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

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

Importante: Personas, por favor, ¡al menos intente con el código antes de responder!

+6

¿Por qué lo hacen sólo lectura en absoluto, si un clic hace que sea editable? –

+1

Eso no es una solución, o una respuesta constructiva, en eso. – Christian

+0

Es por eso que fue un comentario y no una respuesta. – meagar

Respuesta

8

No diría que es un error. Si cambia el valor, también elimina el textRange actual.

Pruebe test.select(), debe devolver el cursor a la entrada.

test.focus() 

dará como resultado un bucle que terminará en un "no hay suficiente memoria" -error.

+0

¡Hola! Lo intentaré lo antes posible. Sin embargo, utilicé .focus() con éxito, como en, no recibí ese error. Pero como dije, no funcionó. Oh, esto es importante, sepa que el cursor está realmente dentro del cuadro de entrada, visiblemente, al menos. (pregunta editada) – Christian

+0

Hmm, ¡funcionó bien! – Christian

+0

'test.select()' corrigió el problema ¡gracias! pero 'test.focus()' no. – eloone

2

Creo que readonly debería ser readOnly. Parece raro que cambies esta propiedad. También puede tratar de retirarlo

jQuery("#foo").removeAttr("readOnly"); //.removeAttr("readonly"); 
+0

uhm? Es "de solo lectura" MSIE parece cambiarlo a "solo lectura", pero funciona igual de bien. Además, eso ya pasó mi problema. – Christian

1

prueba este ive acaba de intentar eso y funciona:

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