Jelly Bean WebView плохо работает с атрибутом HTML maxlength для текстового поля
Jelly Bean, похоже, не нравится атрибут maxlength
HTML для ввода текста. Это, конечно, ограничивает количество вводимых символов, но в тот момент, когда вы пытаетесь ввести больше разрешенного количества символов, текстовое поле терпит неудачу. Теперь вы не сможете вводить другие текстовые поля и не сможете удалить уже введенный символ в этом текстовом поле.
Если вы еще не сталкивались с этим, то попробуйте сами на простом HTML и проверьте. Пожалуйста, скажите мне, если у вас есть какие-либо ключ к разгадке этой загадки.
6 ответов:
Я также испытал ту же проблему в моем приложении
На данный момент я обработал его с помощью js, который удаляет все атрибуты maxlength из входного текста и textarea и останавливает пользователя от ввода большего количества текста, чем требуется. Здесь предполагается, что все входные тексты и текстовые области имеют уникальный идентификатор.
Код также доступен по адресу 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)); } } }); } });
Ошибка для этого вопроса уже была открыта на 35264
Если ваш случай очень прост, то простое дополнение в вашей html-строке тоже может работать, например:
<input type="text" class="abc" onkeypress="if(this.value.length > 9) return false;"/>
Предоставьте разрешение как WRITE_EXTERNAL_STORAGE " в файле манифеста android.
Сейчас в моем android 4.1.2 идет работа с приемом ввода типа номер 7.
Я открыл следующий выпуск android: 35823. Если вы столкнулись с этой проблемой, пожалуйста, отметьте ее, чтобы она могла привлечь некоторое внимание и разрешиться.
Это, безусловно, кошмарный баг разработчика :) Пока вы не осознаете первопричину и не почувствуете "ага..." момент. FYI: несмотря на то, что все поля ввода в DOM замерзают из-за этой ошибки, я все еще мог манипулировать и изменять значения полей ввода с помощью Javascript.
Обрабатывайте нажатие клавиши отдельно для полей ввода, где вам нужно ограничить максимальную длину, добавив отдельный класс и прослушайте нажатие клавиши для этого класса.
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(); } } });