2010-05-31 5 views
6

ist möglich (Cross-Browser-kompatibel) CANCEL einen Tastendruck, nachdem ein Benutzer es gemacht hat (zum Beispiel auf einer Textbox)Abbrechen Tastendruck in jQuery

Den Code, den ich zur Zeit Änderungen des Textbox Wert nach der Verwendung die Tastendruck angezeigt wurde:

$('.number').keypress(function() { 
    this.value = this.value.replace(/[^0-9\.]/g, ''); 
}); 

Antwort

4

GELÖST (UND AKTUALISIERT)

Entschuldigung, ich habe die naheliegendste Option nicht getestet - die funktioniert:

$('.number').keypress(function(event) { 
    return /[0-9\.]/.test(String.fromCharCode(event.keyCode)); 
}); 
+1

+1 Dies ist die Vorgehensweise, wenn Sie den verbotenen Eintrag nicht kurz sehen möchten. Sie können es mit 'test()' etwas aufräumen: '/ [^ 0-9 \.] /. Test (String.fromCharCode (event.keyCode))'. Es ist keine Ersetzung oder Zuweisung erforderlich, da Sie 'return false;' ausführen. Sie müssen auch nicht den globalen Bezeichner 'g' eingeben, da Sie ein einzelnes Schlüsselereignis testen. – user113716

+0

Danke, ich habe meine Antwort mit Ihrem Vorschlag mit einer kleinen Änderung aktualisiert - Entfernen der Carrat (^) aus der Regex als würde das Ergebnis des Tests invertieren :) Sehr geschätzt! – Jimbo

4
$('.number').keypress(function() { 
    if (this.value == 'foobar'){ 
     // "Cancel" keystroke 
     return false; 
    } 
    this.value = this.value.replace(/[^0-9\.]/g, ''); 
}); 
+0

Dies würde nicht funktionieren. Sie müssten unter Verwendung eines regulären Ausdrucks nach unzulässigen Werten in 'this.value' suchen. Sie testen für eine exakte Übereinstimmung mit der Gesamtheit von 'this.value'. – user113716

+0

Wenn die' if() 'Anweisung jemals' true' zurückgegeben hat, würde 'replace()' nicht ausgelöst. Da Sie gegen diesen Wert testen, ist das ein entscheidender Teil. – user113716