2012-08-01 13 views
13

Jelly Bean non sembra gradire l'attributo maxlength dell'HTML per l'immissione di testo. Certamente limita il numero di caratteri di input ma nel momento in cui tenti di digitare oltre il numero consentito di caratteri, la casella di testo fallisce. Ora non sarai in grado di digitare nessun'altra casella di testo e non sarai in grado di cancellare il carattere già inserito, in quella casella di testo.Jelly Bean WebView non funziona bene con l'attributo maxlength HTML per la casella di testo

Se non lo hai già affrontato, prova con un semplice codice HTML e verifica. Per favore dimmi se hai qualche indizio per risolvere questo.

+2

P.S .: questo accade in WebView di Android –

risposta

20

ho anche sperimentato lo stesso problema nel mio app

per ora ho gestito con js, che rimuove tutte maxlength attributi dal testo di input e textarea e si ferma utente inputing più che il testo richiesto. Qui si presume che tutto il testo di input e la textarea abbiano un ID univoco.

Codice è disponibile anche 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)); 
        } 
       } 
      }); 
     } 
    });​ 

Il bug per questo problema è stata già aperta a 35264

+0

Ho aggiunto il suggerimento di Rahul nel codice di cui sopra. Anche se si desidera che questo codice dovrebbe essere eseguito solo per Jelly Bean si può mettere questo codice in seguito, se blocco ' \t var ver = window.navigator.appVersion; \t ver = ver.toLowerCase(); \t se (ver.indexOf ("Android 4.1")> = 0) { \t \t \t // codice richiesto qui \t} ' –

1

Ho aperto il seguente problema Android: 35823. Se riscontri questo problema, fallo in modo che possa ottenere un po 'di attenzione e risoluzione.

6

se il tuo caso è molto semplice quindi una semplice aggiunta nella vostra linea HTML può funzionare anche come così:

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

questo è solo un esempio, supponendo che si serve max 10 caratteri in un campo, forse in un telefono no.campo –

+0

questo non funziona affatto sui telefoni cellulari né IOS –

1

Questo certamente è l'incubo di bug di uno sviluppatore :) Fino a quando ci si rende conto il roo t causa e senti il ​​momento "ahaaa ...". FYI: Anche se tutti i campi di input nel DOM si bloccano a causa di questo bug, ero ancora in grado di manipolare e modificare i valori dei campi di input usando Javascript.

+0

sì attraverso js, ​​è possibile farlo in qualsiasi momento. È solo che il DOM smette di ascoltare gli eventi touch dell'utente. –

2

Fornire il permesso come WRITE_EXTERNAL_STORAGE" nel file di manifest di Android.

Ora nel mio Android 4.1.2 sta lavorando con l'accettazione del numero tipo di ingresso 7.

1

Maneggiare la pressione del tasto separatamente per campi di inserimento in cui è necessario di limitare la maxlength con l'aggiunta di una classe separata e ascoltare pressione di un tasto per quella classe.

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