ฉันพยายามแก้ปัญหานี้ครั้งแรกโดยใช้ jQuery แต่ฉันไม่มีความสุขกับตัวละครที่ไม่พึงประสงค์ (ไม่ใช่ตัวเลข) ปรากฏขึ้นในช่องป้อนข้อมูลก่อนที่จะถูกลบออกจากการกดปุ่ม
กำลังมองหาโซลูชันอื่นฉันพบสิ่งนี้:
จำนวนเต็ม (ไม่ใช่ลบ)
<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>
ที่มา: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example
ตัวอย่างสด: http://jsfiddle.net/u8sZq/
จุดทศนิยม (ไม่ใช่ลบ)
หากต้องการอนุญาตจุดทศนิยมเดียวคุณสามารถทำสิ่งนี้:
<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>
ที่มา: เพิ่งเขียนสิ่งนี้ ดูเหมือนว่าจะทำงาน ตัวอย่างสด: http://jsfiddle.net/tjBsF/
การปรับแต่งอื่น ๆ
- หากต้องการอนุญาตให้พิมพ์สัญลักษณ์เพิ่มเติมให้เพิ่มเครื่องหมายเหล่านั้นลงในนิพจน์ทั่วไปที่ทำหน้าที่เป็นตัวกรองรหัสอักขระพื้นฐาน
- เมื่อต้องการใช้ข้อ จำกัด เชิงบริบทอย่างง่าย ๆ ให้ดูที่เนื้อหาปัจจุบัน (สถานะ) ของฟิลด์อินพุต (oToCheckField.value)
บางสิ่งที่คุณอาจสนใจทำ:
- อนุญาตให้ใช้จุดทศนิยมเดียวเท่านั้น
- อนุญาตให้ลบเครื่องหมายเฉพาะในกรณีที่ตำแหน่งที่จุดเริ่มต้นของสตริง สิ่งนี้จะช่วยให้ตัวเลขติดลบ
ข้อบกพร่อง
- ตำแหน่งคาเร็ตไม่พร้อมใช้งานภายในฟังก์ชั่น สิ่งนี้ช่วยลดข้อ จำกัด ด้านบริบทที่คุณสามารถนำไปใช้ได้อย่างมาก (เช่นไม่มีสองสัญลักษณ์ที่ต่อเนื่องกันเท่ากัน) ไม่แน่ใจว่าวิธีที่ดีที่สุดในการเข้าถึงคืออะไร
ฉันรู้ว่าชื่อขอวิธีแก้ปัญหา jQuery แต่หวังว่าจะมีใครบางคนพบว่ามีประโยชน์อยู่ดี