2009-11-09 14 views
5

Mam ten kod w jQuery aby zapobiec znaków spoza numeryczne są wprowadzane do pola tekstowegoWaliduj numeryczne pole tekstowe w jQuery

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

Teraz na polu tekstowym nie mogę wejść nienumeryczny znaków. To dobrze. Problem polega na tym, że użytkownik wklei tekst w polu tekstowym bez znaków numerycznych.

Czy istnieje sposób/metoda wyłączania wklejania, jeśli wartość jest nieliczbowa? Czy istnieje inne podejście do radzenia sobie z tą sytuacją, którą możesz udostępnić?

+0

Powinieneś lepiej użyć klasy zamiast identyfikatora, aby zidentyfikować wszystkie pola numeryczne. Teraz możesz mieć tylko jedno pole numeryczne na stronie. –

+0

Dobry pomysł. Zmienię mój kod. –

Odpowiedz

5

można użyć wywołania zwrotnego, który sprawdza się na zostawiając pole jeżeli wartość jest ważna, jeśli wartość nie jest ważna wtedy jasne, że i komunikat pokazać błąd:

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

Może zamiast komunikatu o błędzie dane wejściowe mogą być filtrowane w celu usunięcia niedozwolonych znaków? Mogłoby być przyjemniej dla użytkownika, jeśli np. Wklei numer, który ma miejsce na końcu. – Kaivosukeltaja

+0

Zmodyfikowałem to. pierwsza nie działała i nie brała pod uwagę dziesiętnej char – TheVillageIdiot

+0

Spróbuję tego ... –

0

Znalazłem ten skrypt na 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(); 
    } 
}); 

Działa dobrze, chyba że liczba ma "," na niej jak "100 000,00". Będzie renderować tylko "100". "," I reszta zniknęły.

Edycja: Myślę, że to jest na reg ex, ale nie mam pojęcia o tym. ? :(

Każdy pomysł Pomoc

1

gdzie jest napisane:

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

należy umieścić:

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

Chyba ;-)

naprawdę skończyło się w ten sposób:

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

Nie ma więc żadnych alertów anojowych ani niczego; po prostu, jeśli wpiszesz cokolwiek innego niż cyfrę lub kropkę po liczbie, zostanie wymazane. Prosty, ale skuteczny.

Pozdrawiam. Nadzieja pomaga komuś.

Powiązane problemy