2016-10-24 5 views
0

Ich habe ein Szenario, in dem ich verhindern, dass Benutzer 2. numerische nach einer Dezimalzahl eingeben. Ich habe meinen Code auf Keydown-Ereignis. Unten ist mein Code:Überprüfen Sie, ob Text auf Keydown Ereignis

$scope.Inputkeydown = function (event, value) {   
    if (event.keyCode != 8) { 
     if (value != null && value != undefined && value != "") { 
      var regex = /^\d*\.\d$/; //this regex passes only decimal numbers with one digit after decimal 
      if (regex.test(value)) {     
        event.preventDefault(); 
      } 
     } 
    } 

};  

Nun das Problem ist, wenn der Benutzer auswählt, auf dem Text (zB 50.0) in der Textbox und sagt Pressen 5 zu diesem Zeitpunkt wird es auch verhindert bekommen, wie es in dem Textbox Wert 50,0 ist und Regex erlaubt es zu gehen und es wird verhindert, dass in eingegeben wird.

Kann ich auf Keydown überprüfen, wenn Text kopiert wird ?? oder gibt es anders herum?

+0

Haben Sie versucht, dies zu triggern auf 'KeyPress'? – Weedoze

+0

Sie möchten, dass der Benutzer eine Ziffer eingeben kann, wenn der Wert nach dem Komma Null ist? – SPViradiya

Antwort

0

Statt den Benutzer zu verhindern, dass es eintritt, könnten Sie entfernen es nur nach Druck:

function filterDecimals(inp) { 
    return inp.replace(/^(\d*\.\d)\d*$/g, '$1'); 
} 

Oder, wenn Sie alles entfernen möchten, nachdem es die zweite \d* ersetzen mit .*

BEARBEITEN (Anwendungsbeispiel)

Diese Funktion übernimmt den Text als Eingabe und gibt den neuen gefilterten Text zurück. Um dies zu nutzen, fügen Sie einfach einen Event-Handler auf keypress wie so:

<input type="text" id="filteredbox"> 

<script> 
var txt = document.getElementById("filteredbox"); 

// on keyup event (you can change to keypress if you want, but this is more logical here 
txt.addEventListener("keyup", function(){ 
    // sets value of txt to the returned data from filterDecimals() 
    // if statement: only filters it if necessary; this eliminates the "selected text" issue you mentioned 
    if (this.value !== filterDecimals(this.value)) { 
     this.value = filterDecimals(this.value); 
    } 
}); 
</script> 
+0

wie kann ich es auf Keydown tun ?? – pankaj

+0

Ich bin mir nicht sicher, wie Ihr Code aussieht, aber ich habe meine Antwort mit einem Beispiel bearbeitet. Bitte lassen Sie mich wissen, wenn Sie mehr Hilfe benötigen. – Andrew

+1

Woops! Hat meinen Code erneut bearbeitet, um einen Fehler zu beheben. Dies sollte jetzt für Sie funktionieren. – Andrew

Verwandte Themen