Intereting Posts

Jelly Bean WebView плохо работает с атрибутом HTML maxlength для текстового поля

Jelly Bean не похоже на атрибут maxlength HTML для ввода текста. Это, конечно, ограничивает количество вводимых символов, но в тот момент, когда вы пытаетесь ввести за допустимое количество символов, текстовое поле выходит из строя. Теперь вы не сможете вводить никакие другие текстовые поля и не сможете удалить уже введенный символ в этом текстовом поле.

Если вы еще не сталкивались с этим, попробуйте сами на простой HTML и проверьте. Скажите, пожалуйста, если у вас есть ключ к решению этого.

Solutions Collecting From Web of "Jelly Bean WebView плохо работает с атрибутом HTML maxlength для текстового поля"

Я также столкнулся с той же проблемой в своем приложении

На данный момент я обработал его с помощью js, который удаляет все атрибуты maxlength из входного текста и текстового поля и останавливает пользователя от ввода более необходимого текста. Здесь предполагается, что все входные текстовые и текстовые поля имеют уникальный идентификатор.

Код также доступен в 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.

Теперь в моем андроиде 4.1.2 работает с принятием ввода типа номер 7.

Я открыл следующую проблему для Android: 35823 . Если вы испытываете эту проблему, пожалуйста, запустите ее, чтобы она могла получить некоторое внимание и решить проблему.

Это, безусловно, ошибка кошмара разработчика 🙂 Пока вы не осознаете первопричину и не почувствуете момент «ahaaa …». 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(); } } });