2012-08-01 13 views
13

Jelly Bean no parece gustarle el atributo maxlength de HTML para la entrada de texto. Ciertamente restringe el número de caracteres de entrada, pero en el momento en que intenta escribir más allá del número permitido de caracteres, el cuadro de texto falla. Ahora no podrá escribir ningún otro cuadro de texto y tampoco podrá eliminar el carácter ya ingresado en ese cuadro de texto.Jelly Bean WebView no funciona bien con HTML maxlength atributo para cuadro de texto

Si aún no se ha enfrentado a esto, pruébelo usted mismo en un simple HTML y verifique. Por favor, dime si tienes alguna pista para resolver esto.

+2

P.S .: esto sucede en vista web del androide –

Respuesta

20

también han experimentado el mismo problema en mi aplicación

por ahora he manejado con js, que elimina toda maxlength atributos de texto de entrada y el área de texto y se detiene usuario inputing más que el texto requerido. Aquí se supone que todo el texto de entrada y el área de texto tienen una identificación única.

Código también está disponible en jsfiddle

$(document).ready(function() { 

     var ver = window.navigator.appVersion; 
      ver = ver.toLowerCase(); 

     if (ver.indexOf("android 4.1") >= 0){    

      var idMaxLengthMap = {}; 

      //loop through all input-text and textarea element 
      $.each($(':text, textarea, :password'), function() { 
       var id = $(this).attr('id'), 
        maxlength = $(this).attr('maxlength'); 

       //element should have id and maxlength attribute 
       if ((typeof id !== 'undefined') && (typeof maxlength !== 'undefined')) { 
        idMaxLengthMap[id] = maxlength; 

        //remove maxlength attribute from element 
        $(this).removeAttr('maxlength'); 

        //replace maxlength attribute with onkeypress event 
        $(this).attr('onkeypress','if(this.value.length >= maxlength) return false;'); 
       } 
      }); 

      //bind onchange & onkeyup events 
      //This events prevents user from pasting text with length more then maxlength 
      $(':text, textarea, :password').bind('change keyup', function() { 
       var id = $(this).attr('id'), 
        maxlength = ''; 
       if (typeof id !== 'undefined' && idMaxLengthMap.hasOwnProperty(id)) { 
        maxlength = idMaxLengthMap[id]; 
        if ($(this).val().length > maxlength) { 

         //remove extra text which is more then maxlength 
         $(this).val($(this).val().slice(0, maxlength)); 
        } 
       } 
      }); 
     } 
    });​ 

El error para este problema ya estaba abierto al 35264

+0

He añadido la sugerencia de Rahul en el código de seguridad. Además, si desea que este código se ejecute solo para Jelly Bean, puede poner este código a continuación si el bloque ' \t var ver = window.navigator.appVersion; \t ver = ver.toLowerCase(); \t si (ver.indexOf ("Android 4.1")> = 0) { \t \t \t // código necesario aquí \t} ' –

1

He abierto el siguiente número de Android: 35823. Si tiene este problema, ejecútelo para que pueda recibir atención y resolución.

6

si su caso es muy simple entonces una simple adición en su línea de HTML puede funcionar también, como por lo que:

​<input type="text" class="abc" onkeypress="if(this.value.length > 9) return false;"/>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
+0

esto es sólo un ejemplo, suponiendo que necesita 10 caracteres como máximo en un campo, tal vez en un teléfono no.campo –

+0

esto no funciona en absoluto en teléfonos móviles ni IOS –

1

Esto sin duda es la pesadilla de error de un desarrollador :) Hasta que se da cuenta de la Roo t causa y siente el momento "ahaaa ..." FYI: Aunque todos los campos de entrada en el DOM se congelan debido a este error, aún pude manipular y cambiar los valores de los campos de entrada usando Javascript.

+0

sí a través de js, puede hacerlo en cualquier momento. Es solo que el DOM deja de escuchar los eventos táctiles del usuario. –

2

Proporcionar el permiso como WRITE_EXTERNAL_STORAGE" en el archivo de manifiesto de Android.

Ahora en mi Android 4.1.2 está trabajando con la aceptación del número de tipo de entrada 7.

1

la manija de la pulsación de tecla por separado para los campos de entrada donde se necesita para restringir el maxlength mediante la adición de una clase separada y escuchar pulsación de tecla para esa clase.

HTML

<textarea ng-model="model " rows="3" maxlength="100" cols="70" class="custom_txtarea ng-pristine ng-valid charlength" placeholder="Achievements"></textarea> 

Javascript

$(".charlength").keypress(function(event) { 
      if(event.which >= 32 || event.which == 13) { 
      var maxLength = event.currentTarget.maxLength; 
      var length = event.currentTarget.value.length; 
      if(length >= maxLength) {      
       event.preventDefault(); 
      } 
     } 
    }); 
Cuestiones relacionadas