Jquery preventDefault non funziona su Android 4.4 browser predefinito

Sto lavorando con un sito Web angular 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.

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

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

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

Violino funzionante

Nota: – Non riesco ad utilizzare l’evento keypress poiché il browser Android predefinito non può ascoltare questo evento.

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

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

Non so perché vuoi impedire un evento chiave, ma penso che tu voglia solo impedire l’inserimento di caratteri non validi. Vediamo come potresti 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, risolverà il tuo problema ovunque e non dimenticherò mai “incolla”!

Se stai sviluppando un sito web basato su angular, dovresti risolvere il problema in modo angular.

Ecco il campione su come farlo.

L’idea è di usare NgModelController e FormController .

Si prega di utilizzare $formatters di angularjs. Questo ti aiuterà a controllare viewValue prima che sia impostato su modelValue .

Si prega di consultare questo documento: https://docs.angularjs.org/api/ng/type/ngModel.NgModelController