Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

теперь я обработал его с помощью 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

Ответ 2

Если ваш случай очень прост, то простое добавление в вашу html-строку также может работать так:

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

Ответ 3

Предоставьте разрешение как WRITE_EXTERNAL_STORAGE "в файле манифеста Android.

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

Ответ 4

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

Ответ 5

Это, безусловно, ошибка кошмара разработчика:) Пока вы не осознаете первопричину и не почувствуете момент "ahaaa...". FYI: Несмотря на то, что все поля ввода в DOM замерзают из-за этой ошибки, я все еще мог манипулировать и изменять значения полей ввода с помощью Javascript.

Ответ 6

Обращайтесь к клавиатуре отдельно для полей ввода, где вам нужно ограничить максимальную длину добавлением отдельного класса и прослушивания нажатия клавиши для этого класса.

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();
           }
       }
   });