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.
- Viewport ajusta el ancho de la pantalla y las grandes imágenes
- Android - WebView no reproduce videos de YouTube
- Cómo inyectar un script javascript en una vista web antes de la carga html en android 7
- Detectar error de vista Web y mostrar mensaje
- Botón de retroceso y avance para webview en android. ¿cómo?
- Android: mostrar / ocultar fragmento deja un área vacía
- Android WebView getElementById ('math') no funciona dinámicamente
- Android: el contenido de Flash rompe los límites de WebView y superpone elementos de diseño nativos
- La concurrencia de webview de Android causó SQLiteException: la base de datos está bloqueada
- Android WebView PictureListener Deprecated - ¿Todavía no hay alternativa?
- ¿Cómo puedo detectar cuándo una página WebView intenta cerrar?
- Interceptación de descarga en webview y descarga mediante HttpClient
- Rendimiento del androide Sencha Touch 2
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(); } } });