Jelly Bean WebView no funciona bien con el atributo HTML maxlength para el cuadro de texto

Jelly Bean no parece que le guste 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 de caracteres permitido, el cuadro de texto falla. Ahora no podrá escribir en ningún otro cuadro de texto y tampoco podrá borrar el carácter ya ingresado, en ese cuadro de texto.

Si aún no has enfrentado esto, inténtalo tú mismo en un simple HTML y comprueba. Por favor, dígame si tiene alguna pista para resolver esto.

También he experimentado el mismo problema en mi aplicación

Por ahora lo he manejado con js, que elimina todos los atributos maxlength del texto de entrada y textarea y evita que el usuario introduzca más que el texto requerido. Aquí se supone que todo el texto de entrada y textarea tienen identificador único.

El 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 en 35264

Si su caso es muy simple, entonces una simple adición en su línea html puede funcionar también, así:

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

Proporcione el permiso como WRITE_EXTERNAL_STORAGE "en el archivo de manifiesto android.

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

He abierto el siguiente problema de android: 35823 . Si está experimentando este problema, por favor, márquelo para que pueda obtener algo de atención y resuelto.

Esto ciertamente es un error de pesadilla de un desarrollador 🙂 Hasta que te das cuenta de la causa raíz y sentir el momento "ahaaa …". FYI: Aunque todos los campos de entrada en el DOM congelar debido a este error, todavía era capaz de manipular y cambiar los valores de los campos de entrada utilizando Javascript.

Maneje la pulsación de teclas por separado para los campos de entrada en los que necesita restringir la longitud máxima añadiendo una clase separada y presionando la tecla correspondiente a 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(); } } }); 
  • Android: Cómo comprobar la carga exitosa de url al usar webview.loadUrl
  • Desbordamiento de iframe de Webview
  • No más Text Reflow después de ampliar KitKat WebView
  • Enlace de correo electrónico de Webview (mailto)
  • Control HTML <select> desactivado en Android WebView (en el emulador)
  • Android: WebView shouldInterceptRequest no agregar RequestProperties en el WebView
  • Vista web de Android: descarga archivos como los navegadores
  • Android 4.0.1 rompe el almacenamiento local HTML 5 de WebView?
  • Diseño de página de pago de Paypal roto en webview android
  • Hacer AppBarLayout responder a desplazamiento en WebView
  • Reemplazo de Android Mapview para utilizar un servicio WMS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.