Jelly Bean WebView与文本框的HTML maxlength属性不兼容

时间:2012-08-01 07:34:33

标签: android webview maxlength android-4.2-jelly-bean

Jelly Bean似乎不喜欢HTML的maxlength属性用于文本输入。它肯定会限制输入字符的数量,但是当您尝试键入超出允许的字符数时,文本框将失败。现在,您将无法键入任何其他文本框,也无法在该文本框中删除已输入的字符。

如果您还没有遇到过这种情况,请自行尝试使用简单的HTML并检查。请告诉我你是否有解决这个问题的线索。

6 个答案:

答案 0 :(得分:20)

我在我的应用中遇到了同样的问题

现在我用js处理它,它从输入文本和textarea中删除所有maxlength属性,并阻止用户输入超过所需文本的内容。这里假设所有输入文本和textarea都有唯一的id。

代码也可在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

处打开

答案 1 :(得分:6)

如果您的案例非常简单,那么html行中的简单添加也可以起作用,如下所示:

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

答案 2 :(得分:2)

提供WRITE_EXTERNAL_STORAGE&#34;在android Manifest文件中。

现在我的android 4.1.2正在接受输入类型编号7。

答案 3 :(得分:1)

我打开了以下android问题:35823。如果您遇到此问题,请为其注明,以便获得一些关注并解决。

答案 4 :(得分:1)

这当然是开发人员的噩梦:) 直到你意识到根本原因并感受到“ahaaa ......”的那一刻。 仅供参考:即使DOM中的所有输入字段因此错误而冻结,我仍然可以使用Javascript操作和更改输入字段的值。

答案 5 :(得分:1)

分别为输入字段处理按键,您需要通过为该类添加单独的类和listen按键来限制maxlength。

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