2012-08-01 13 views
13

Jelly Bean nie wydaje się lubić atrybutu HTML maxlength do wprowadzania tekstu. Z pewnością ogranicza liczbę wprowadzanych znaków, ale w momencie, gdy spróbujesz wpisać więcej niż dozwolona liczba znaków, pole tekstowe zawiedzie. Teraz nie będziesz mógł wpisywać żadnych innych pól tekstowych i nie będziesz mógł usunąć już wprowadzonego znaku w tym polu tekstowym.Jelly Bean WebView nie działa dobrze z atrybutem maxlength HTML dla pola tekstowego

Jeśli jeszcze tego nie robiłeś, spróbuj sam na prosty HTML i sprawdź. Proszę powiedz mi, jeśli masz jakąś wskazówkę, jak rozwiązać ten problem.

+2

P.S .: tak się dzieje w internetowej wersji Androida –

Odpowiedz

20

Mam również doświadczył ten sam problem w moim app

teraz mam obchodzić go z JS, który usuwa wszystkie MaxLength atrybuty tekstu wejściowego i textarea i zatrzymuje użytkownikowi inputing więcej niż wymagana tekstu. Tutaj zakłada się, że cały tekst wejściowy i textarea mają unikalny identyfikator.

Kodeks jest również dostępny w 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)); 
        } 
       } 
      }); 
     } 
    });​ 

Błąd tego problemu został już otwarty w 35264

+0

Dodałem propozycję rahula w powyższym kodzie. Również jeśli chcesz, aby ten kod działał tylko dla fasoli Jelly, możesz umieścić ten kod poniżej, jeśli blok ' \t var ver = window.navigator.appVersion; \t ver = ver.toLowerCase(); \t if (ver.indexOf ("Android 4.1")> = 0) \t { \t \t // wymagany kod tutaj \t} ' –

1

Otworzyłem następujący numer Androida: 35823. Jeśli ten problem występuje, napisz go, aby uzyskać trochę uwagi i rozwiązać problem.

6

jeśli sprawa jest bardzo prosta, a następnie prosty dodatek w linii html może pracować także, podobnie jak tak:

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

to tylko przykład, zakładając, że trzeba maksymalnie 10 znaków w polu, może w telefonie nr.pole –

+0

to nie działa w ogóle na telefonach komórkowych ani IOS –

1

to z pewnością jest deweloperem za koszmar bug :) Dopóki zrealizować roo Przyczynij się i poczuj moment "ahaaa ...". FYI: Mimo że wszystkie pola wejściowe w DOM zamarzły z powodu tego błędu, nadal byłem w stanie manipulować i zmieniać wartości pól wejściowych za pomocą Javascript.

+0

tak przez js, możesz to zrobić w każdej chwili. Chodzi o to, że DOM przestaje słuchać zdarzeń dotykowych od użytkownika. –

2

Podaj pozwolenie jako WRITE_EXTERNAL_STORAGE”w Android pliku manifestu.

Teraz w moim android 4.1.2 współpracuje z akceptacją liczby input type 7.

1

chwytać przyciśnięcie oddzielnie dla pól wejściowych, gdzie trzeba ograniczyć maxLength dodając oddzielną klasę i słuchać przyciśnięcie dla tej klasy.

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(); 
      } 
     } 
    }); 
Powiązane problemy