İlk olarak jQuery kullanarak bunu çözmeyi denedim, ancak keyup kaldırılmadan hemen önce giriş alanında görünen istenmeyen karakterler (rakam olmayan) hakkında mutlu değildi.
Diğer çözümleri aradığımda bunu buldum:
Tamsayılar (negatif olmayan)
<script>
function numbersOnly(oToCheckField, oKeyEvent) {
return oKeyEvent.charCode === 0 ||
/\d/.test(String.fromCharCode(oKeyEvent.charCode));
}
</script>
<form name="myForm">
<p>Enter numbers only: <input type="text" name="myInput"
onkeypress="return numbersOnly(this, event);"
onpaste="return false;" /></p>
</form>
Kaynak: https://developer.mozilla.org/tr-TR/docs/Web/API/GlobalEventHandlers.onkeypress#Example
Canlı örnek: http://jsfiddle.net/u8sZq/
Ondalık sayılar (negatif olmayan)
Tek bir ondalık basamağa izin vermek için şöyle bir şey yapabilirsiniz:
<script>
function numbersOnly(oToCheckField, oKeyEvent) {
var s = String.fromCharCode(oKeyEvent.charCode);
var containsDecimalPoint = /\./.test(oToCheckField.value);
return oKeyEvent.charCode === 0 || /\d/.test(s) ||
/\./.test(s) && !containsDecimalPoint;
}
</script>
Kaynak: Sadece yazdı. Çalışıyor gibi görünüyor. Canlı örnek: http://jsfiddle.net/tjBsF/
Diğer özelleştirmeler
- Daha fazla sembolün yazılmasına izin vermek için, bunları temel karakter kodu filtresi olarak işlev gören normal ifadeye ekleyin.
- Basit bağlamsal kısıtlamalar uygulamak için giriş alanının (oToCheckField.value) geçerli içeriğine (durumuna) bakın
İlginizi çekebilecek bazı şeyler:
- Yalnızca bir ondalık basamağa izin verilir
- Eksi işaretine yalnızca dizenin başında konumlandırılmışsa izin verin. Bu negatif sayılara izin verir.
eksiklikleri
- Düzeltme konumu konumu işlevin içinde kullanılamaz. Bu, uygulayabileceğiniz bağlamsal kısıtlamaları büyük ölçüde azalttı (örneğin, birbirini izleyen iki eşit sembol yok). Erişmenin en iyi yolunun ne olduğundan emin değilim.
Başlık jQuery çözümleri istedi biliyorum, ama umarım birisi yine de yararlı bulacaktır.