2015-05-15 12 views
16

Sto lavorando con un sito Web angolare e basato su jquery. Ho un campo di inserimento del testo per la convalida della matrice di numeri mobili. Il mio requisito è quello di limitare l'utente a inserire alfabeti, ecc.Jquery preventDefault non funziona su Android 4.4 browser predefinito

Il problema è che sto usando e.preventDefault() ma non funziona nel browser Android predefinito ma funziona perfettamente in Android Chrome.

Ho cercato molto ma non sono riuscito a ottenere alcuna soluzione.

mio codice di esempio: -

$('#test').keydown(function (e) { 
     e.stopPropagation(); 
     e.preventDefault(); 
     e.returnValue = false; 
     e.cancelBubble = true; 
     return false; 
}); 

Ho anche provato: -

$('#test').keydown(function (e) { 
    if (e.preventDefault) { 
     e.preventDefault(); 
    } else { 
     e.returnValue = false; 
    } 
}); 

Working fiddle

Nota: - Non posso usare keypress evento come browser di default Android non può ascoltare questo evento.

+1

Avete provato a utilizzare un 'input type =" numero "' il supporto per questo è abbastanza comune ora: http://caniuse.com/#feat=input-number –

+1

Non posso usare 'type = number' come validazione è per numeri floating array che possono ricevere -/+ /, /. anche. Il tastierino numerico non mi permetterà di inserire questi tasti. –

+1

Invece di usare 'event.preventDefault'. Beacuse in ANdriod e non è definito –

risposta

2

Ho anche avuto questo problema con il browser predefinito su Android. preventDefault non mi ha aiutato, quindi ho usato la funzione jQuery.

$('#test').on('input',function() { 
     var inputText = $(this).val(); 

     var resultText = inputText.replace(/[^0-9]/g, ''); 
     $(this).val(resultText); 
    }); 

È possibile aggiungere a regex gli altri caratteri che è necessario consentire. Spero che sia d'aiuto.

+0

La documentazione completa può essere trovata qui: https://api.jquery.com/on/. La funzione allega semplicemente una funzione del gestore di eventi per uno o più eventi agli elementi selezionati. Ho allegato la mia funzione sull'evento di input all'elemento che ha id '#test'. Ottengo il testo che si trova su quel campo e sostituisco i caratteri che non mi servono ([^ 0-9] -> tutto ciò che non è una cifra) con "". Assegno il nuovo valore al campo "# test". –

+0

Dovresti anche gestire eventi 'paste'. –

2

non so il motivo per cui si desidera impedire un evento chiave, ma penso che si desidera solo per evitare l'ingresso di caratteri non validi. Vediamo come si potrebbe risolvere il problema senza preventDefault:

(function(){ // anon function for scope 

    var prevVal = $("#test").val(); // get initial value of input 

    $('#test').on("input", function (e) { // input will also handle paste event. it handle every input' 
     if(/*your `if` here*/ Math.random() > 0.3){ 
      this.value = prevVal; // You shall not pass! 
     } 
     prevVal = this.value; // save current valid value 
    }); 

})(); 

http://jsfiddle.net/rk5wuubo/

spero, che possa risolvere il problema in tutto il mondo e non dimenticare mai di "incolla"!

+0

Ho provato con il vecchio valore ma l'input tremava per questo, ma proverò la tua soluzione e se fosse preoccupata ks quindi selezionerò la tua risposta. –

+0

Per l'applicazione basata su angoli è una risposta assolutamente non corretta, poiché il modello angolare non viene aggiornato nell'ascoltatore sopra indicato. – Mikalai

+0

può essere risolto con un singolo $ apply alla fine della funzione di validazione. – JerryCauser

2

Se si sviluppa un sito Web in base all'angolare, è necessario risolvere il problema in modo angolare.

Here l'esempio come eseguire questa operazione.

L'idea è di utilizzare NgModelController e FormController.

+0

Ho provato con la convalida angolare ma il mio requisito era un po 'più di quello che volevo impedire all'utente di inserire input non validi. Il mio unico problema stava accadendo nel browser predefinito Android. –

Problemi correlati