2009-11-09 14 views
5

Ho questo codice jQuery per evitare caratteri non numerici viene immesso al campo di testoConvalida numerico campo di testo in jQuery

$("#NumericField").numeric(); 

Ora, sul campo di testo i cant inserire caratteri non numerici. Va bene. Il problema qui è se l'utente si incollerà sul campo di testo con caratteri non numerici.

C'è un modo/metodo per disabilitare incollare se il valore non è numerico? O esiste un altro approccio per gestire questa situazione che è possibile condividere?

+0

È consigliabile utilizzare una classe anziché un ID per identificare tutti i campi numerici. Ora puoi avere un solo campo numerico su una pagina. –

+0

Buona idea. Cambierò il mio codice. –

risposta

5

è possibile utilizzare callback che controlla lasciando campo se il valore è valida se il valore non è valido quindi cancellarlo e messaggio vedi errore:

var decimal_char = ','; 
function isvalidnumber(){ 
    var val=$(this).val(); 
    //This regex is from the jquery.numeric plugin itself 
    var re=new RegExp("^\\d+$|\\d*" + decimal_char + "\\d+"); 
    if(!re.exec(val)){ 
     alert("Invalid number"); 
     $(this).val(""); 
    }  
} 
$(document).ready(function(){ 
    $("#txtN").numeric(decimal_char,isvalidnumber); 
}); 
+0

Forse invece di un messaggio di errore, l'input potrebbe essere filtrato per rimuovere i caratteri non validi? Potrebbe essere più bello per l'utente se lui/lei incolla un numero che ha uno spazio alla fine, per esempio. – Kaivosukeltaja

+0

L'ho modificato. il primo non funzionava e non prendeva in considerazione il carattere decimale – TheVillageIdiot

+0

Proverò questo ... –

0

Ho trovato questo script su http://www.kunalbabre.com/jQueryLibrary/index.php:

$('input[numeric]').keyup(function() {  
    var d = $(this).attr('numeric'); 

    var value = $(this).val(); 
    var orignalValue = value; 
    value = value.replace(/[0-9]*/g, ""); 

    var msg = "Only Integer Values allowed."; 

    if (d == 'decimal') { 
     value = value.replace(/\./, ""); 
     msg = "Only Numeric Values allowed."; 
    } 

    if (value != '') { 
     orignalValue = orignalValue.replace(/([^0-9].*)/g, "") 
     $(this).val(orignalValue); 
     //alert(msg); 
     $(this).after('<span style="margin-left:5px;color:red;position:absolute;">' + msg + '</span>'); 
    } else { 
     $(this).next('span').remove(); 
    } 
}); 

Funziona bene eccetto se il numero ha ',' su di esso come '100.000.00'. Renderà solo '100'. Il "," e il resto sono spariti.

Edit: Penso che questo è sul reg ex, ma senza dubbio su di esso. ?? :(

Qualsiasi idea Aiuto

1

in cui si dice:

value = value.replace(/\./, ""); 

si dovrebbe mettere:

value = value.replace(/\.\,/, ""); 

immagino ;-)

ho davvero finito A proposito di questo:

$(‘.InputClass’).keyup(function(){ 
    if ($(this).val() != "") 
    $(this).val($(this).val().replace(/[^0-9\.]/g, "")); 
}); 

Quindi, niente allarmi anoying né nulla; solo se si digita qualcosa di diverso da un numero o un punto dopo un numero, viene eliminato. Semplice ma efficace.

Cheers. La speranza aiuta qualcuno.

Problemi correlati