2017-02-13 1 views
-1

Ich möchte mein Eingabeelement akzeptieren nur Nummer. Ich möchte es in Echtzeit validieren und die Farbe des Etiketts rot werden lassen, wenn die Eingabe nicht 10-stellig ist.Javascript Eingabefeld Validierung (nur Nummer)

Hilfe bitte auf meinem js Zustand. Vielen Dank.

function isNumberKey(evt) { 
 
    var charCode = (evt.which) ? evt.which : event.keyCode 
 

 
    if (charCode > 31 && (charCode < 48 || charCode > 57)) { 
 
    document.getElementById("lbltest").style.color = "red" 
 
    return false; 
 
    } else { 
 
    document.getElementById("lbltest").style.color = "green" 
 
    return true; 
 
    } 
 
}
<label id="lbltest">Test</label> 
 
<input name="txtTry" type="text" pattern=".{10,}" 
 
     minlength="10" maxlength="10" 
 
     onkeypress="return isNumberKey(event)">

+0

Wäre nicht '' 'Teil davon? – j08691

+1

Mögliche Duplikate von [HTML-Texteingabe erlauben nur numerische Eingabe] (http://stackoverflow.com/questions/469357/html-text-input-allow-only-numeric-input) –

+0

Warum nicht 'type =" number "verwenden? 'für einen Anfang ... –

Antwort

2

var input=document.getElementById('input'), 
 
    label=document.getElementById('lbltest'); 
 

 
input.oninput=function(){ 
 
    var value=this.value; 
 
    var isnum = /^\d+$/.test(value); 
 
    if(isnum && value.length===10){ 
 
    label.style.color="green"; 
 
    }else{ 
 
     label.style.color="red"; 
 
    } 
 
     
 
    }
<label id="lbltest">Test </label> 
 
<input id="input" name="txtTry" type="text" minlength="10" maxlength="10">

+0

Hallo. ich danke dir sehr. das funktioniert perfekt, aber wenn ich auf "Senden" -Button klicke und ich 10 Zeichen eingabe, akzeptiere ich es trotzdem und sende es ab. Können wir versuchen, nur Nummern wie meinen vorherigen Code zu akzeptieren? – Durex

1

jQuery Da macht es ein wenig einfacher Ereignisse zu behandeln, habe ich die Bibliothek integriert, um das Szenario zu lösen. Ich habe die Elementattribute behalten, die Sie auf eigene Nachfrage verwenden oder entfernen können.

$(document).ready(function() { 
 
    $('.validate').on('input', function(event) { 
 
    var $element = $(this); 
 
    var valid = true; 
 
    if ($element.attr('pattern')) { 
 
     var pattern = new RegExp($element.attr('pattern')); 
 
     valid = valid && pattern.test($element.val()); 
 
    } 
 
    if ($element.attr('minlength')) { 
 
     value = valid && $element.val().length >= $element.attr('minlength'); 
 
    } 
 
    if ($element.attr('maxlength')) { 
 
     value = valid && $element.val().length <= $element.attr('maxlength'); 
 
    } 
 
    if (!valid) { 
 
     $element.addClass('validation-error'); 
 
    } else { 
 
     $element.removeClass('validation-error'); 
 
    } 
 
    }); 
 
});
<style> 
 
.validation-error { border: 1px red solid; background: rgba(255, 0, 0, 0.25); } 
 
</style> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<label id="lbltest">Test </label> 
 
<input id="input" class="validate" 
 
     name="txtTry" type="text" 
 
     minlength="10" maxlength="10" 
 
     pattern="^\d{10}$">

+0

Danke Kumpel! das funktioniert auch perfekt! – Durex

2

ändern Ihre Funktion wie folgt aus:

function isNumberKey(evt) 
{ 
    var charCode = (evt.which) ? evt.which : event.keyCode 
    if (charCode > 31 && (charCode < 48 || charCode > 57)) 
    { 
    document.getElementById("lbltest").style.color="red" 
    return false; 
    } 
    else 
    { 
    if (document.getElementById("txtTry").value.length < 10) 
    { 
     document.getElementById("lbltest").style.color="red" 
    } 
    else{ 
     document.getElementById("lbltest").style.color="green" 
    } 

    return true; 
    } 

}

dann die HTML wie folgt ändern:

<label id="lbltest">Test </label> 
<input name="txtTry" id="txtTry" type="text" pattern=".{10,}" minlength="10" maxlength="10" onkeydown="return isNumberKey(event)"> 
+0

Danke Kumpel! das funktioniert perfekt! genau wie was ich tun muss! :) – Durex

+0

Hallo, eine andere Sache. Wenn ich den Code ausprobiere und das Feld null ist, wird die Beschriftung rot. Ich möchte, dass Label die Farbe schwarz behält, wenn es leer ist. – Durex

+0

können Sie das tun, indem Sie eine andere Bedingung hinzufügen ("if (document.getElementById (" txtTry "). Value.length == 1)") innerhalb des if-Blocks, wo die Länge der Eingabe gezählt wird. aber ich denke, dies zu tun ist nicht logisch gültig. – Mamun