ฉันกำลังสร้างหน้าเว็บที่ฉันมีช่องป้อนข้อความที่ฉันต้องการอนุญาตให้ใช้เฉพาะอักขระที่เป็นตัวเลขเช่น (0,1,2,3,4,5 ... 9) 0-9
ฉันจะทำสิ่งนี้โดยใช้ jQuery ได้อย่างไร
ฉันกำลังสร้างหน้าเว็บที่ฉันมีช่องป้อนข้อความที่ฉันต้องการอนุญาตให้ใช้เฉพาะอักขระที่เป็นตัวเลขเช่น (0,1,2,3,4,5 ... 9) 0-9
ฉันจะทำสิ่งนี้โดยใช้ jQuery ได้อย่างไร
คำตอบ:
หมายเหตุ:นี่เป็นคำตอบที่อัพเดทแล้ว ความคิดเห็นด้านล่างอ้างถึงเวอร์ชันเก่าซึ่งยุ่งกับรหัส
ลองตัวเองใน JSFiddle
ไม่มีการใช้งาน jQuery ดั้งเดิมสำหรับสิ่งนี้ แต่คุณสามารถกรองค่าอินพุตของข้อความ<input>
ด้วยinputFilter
ปลั๊กอินต่อไปนี้(รองรับการคัดลอก + วาง, ลาก + วาง, แป้นพิมพ์ลัด, การทำงานของเมนูบริบท, คีย์ที่ไม่สามารถพิมพ์ได้, ตำแหน่งคาเร็ตต่างกัน รูปแบบแป้นพิมพ์และเบราว์เซอร์ทั้งหมดตั้งแต่ IE 9 ):
// Restricts input for the set of matched elements to the given inputFilter function.
(function($) {
$.fn.inputFilter = function(inputFilter) {
return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
this.value = "";
}
});
};
}(jQuery));
ตอนนี้คุณสามารถใช้inputFilter
ปลั๊กอินเพื่อติดตั้งตัวกรองอินพุต:
$(document).ready(function() {
$("#myTextBox").inputFilter(function(value) {
return /^\d*$/.test(value); // Allow digits only, using a RegExp
});
});
ดูตัวอย่างของตัวกรองอินพุตเพิ่มเติมJSFiddle โปรดทราบว่าคุณยังต้องทำการตรวจสอบฝั่งเซิร์ฟเวอร์!
jQuery ไม่จำเป็นจริง ๆ สำหรับสิ่งนี้คุณสามารถทำสิ่งเดียวกันกับ JavaScript ที่บริสุทธิ์ได้เช่นกัน ดูคำตอบนี้
HTML 5 มีโซลูชันแบบเนทีฟด้วย<input type="number">
(ดูข้อกำหนด ) แต่โปรดทราบว่าการสนับสนุนเบราว์เซอร์แตกต่างกันไป:
step
, min
และmax
คุณลักษณะe
และE
ลงในฟิลด์ ดูคำถามนี้ด้วยลองตัวเองใน w3schools.com
นี่คือฟังก์ชั่นที่ฉันใช้:
// Numeric only control handler
jQuery.fn.ForceNumericOnly =
function()
{
return this.each(function()
{
$(this).keydown(function(e)
{
var key = e.charCode || e.keyCode || 0;
// allow backspace, tab, delete, enter, arrows, numbers and keypad numbers ONLY
// home, end, period, and numpad decimal
return (
key == 8 ||
key == 9 ||
key == 13 ||
key == 46 ||
key == 110 ||
key == 190 ||
(key >= 35 && key <= 40) ||
(key >= 48 && key <= 57) ||
(key >= 96 && key <= 105));
});
});
};
จากนั้นคุณสามารถแนบมันเข้ากับการควบคุมของคุณโดยทำ
$("#yourTextBoxName").ForceNumericOnly();
return this.each(function()
?
each
จากreturn this.each(function()
คืออนุญาตให้มีวัตถุหลายรายการตามที่ HaggleLad กล่าวและreturn
ส่วนหนึ่งคือการส่งคืนวัตถุ jQuery กลับไปที่ผู้โทรเพื่ออนุญาตการผูกมัดเช่น$("input[type='text'").ForceNumericOnly().show()
แบบอินไลน์:
<input name="number" onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')">
สไตล์ที่ไม่สร้างความรำคาญ (ด้วย jQuery):
$('input[name="number"]').keyup(function(e)
{
if (/\D/g.test(this.value))
{
// Filter non-digits from input value.
this.value = this.value.replace(/\D/g, '');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="number">
onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')"
ลองนี้
/[^0-9]|^0+(?!$)/g
เพื่อป้องกันซีรีย์นำที่เป็นศูนย์
คุณสามารถใช้นิพจน์ทั่วไป JavaScript ง่ายๆเพื่อทดสอบอักขระที่เป็นตัวเลขอย่างหมดจด:
/^[0-9]+$/.test(input);
สิ่งนี้จะคืนค่าจริงถ้าอินพุตเป็นตัวเลขหรือเท็จถ้าไม่
หรือสำหรับรหัสเหตุการณ์ใช้ง่ายด้านล่าง:
// Allow: backspace, delete, tab, escape, enter, ctrl+A and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
var charValue = String.fromCharCode(e.keyCode)
, valid = /^[0-9]+$/.test(charValue);
if (!valid) {
e.preventDefault();
}
คุณสามารถใช้กับกิจกรรมอินพุตเช่นนี้:
$(document).on("input", ".numeric", function() {
this.value = this.value.replace(/\D/g,'');
});
แต่รหัสสิทธิพิเศษนี้คืออะไร?
decimal
ระหว่าง0.0
ไป24.0
ฉันไม่สามารถที่จะปล่อยให้มันใส่.
this.value = Number(this.value.replace(/\D/g, ''));
สั้นและหวาน - แม้ว่ามันจะไม่ได้รับความสนใจมากหลังจากผ่านไป 30+ คำตอบ)
$('#number_only').bind('keyup paste', function(){
this.value = this.value.replace(/[^0-9]/g, '');
});
การใช้งานจาวาสคริปต์ทำงานisNaN ,
if (isNaN($('#inputid').val()))
if (isNaN (document.getElementById ('inputid'). val ())
if (isNaN(document.getElementById('inputid').value))
อัปเดต: และนี่เป็นบทความที่ดีที่พูดถึง แต่ใช้ jQuery: การจำกัด การป้อนข้อมูลในกล่องข้อความ HTML เป็นค่าตัวเลข
document.getElementById('inputid').val()
เพื่อน .. ที่ยังคง jquery .val()
เป็นสิ่งที่ jquery ใช้.value
decimal
ระหว่าง0.0
ไป24.0
ฉันไม่สามารถที่จะปล่อยให้มันใส่.
$(document).ready(function() {
$("#txtboxToFilter").keydown(function(event) {
// Allow only backspace and delete
if ( event.keyCode == 46 || event.keyCode == 8 ) {
// let it happen, don't do anything
}
else {
// Ensure that it is a number and stop the keypress
if (event.keyCode < 48 || event.keyCode > 57 ) {
event.preventDefault();
}
}
});
});
ที่มา: http://snipt.net/GerryEng/jquery-making-textfield-only-accept-numeric-values
ฉันใช้สิ่งนี้ในไฟล์ js ทั่วไปภายในของเรา ฉันเพิ่งเพิ่มคลาสให้กับอินพุตใด ๆ ที่ต้องการพฤติกรรมนี้
$(".numericOnly").keypress(function (e) {
if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});
เรียบง่ายสำหรับฉันคือ
jQuery('.plan_eff').keyup(function () {
this.value = this.value.replace(/[^1-9\.]/g,'');
});
this.value.replace(/[^0-9\.]/g,'');
เพื่อรวมข้อกำหนดของ OP ของ 0-9
ทำไมจึงซับซ้อน คุณไม่จำเป็นต้องมี jQuery เพราะมีแอตทริบิวต์รูปแบบ HTML5:
<input type="text" pattern="[0-9]*">
สิ่งที่ยอดเยี่ยมคือมันแสดงแป้นพิมพ์ตัวเลขบนอุปกรณ์มือถือซึ่งดีกว่าการใช้ jQuery
คุณสามารถทำสิ่งเดียวกันได้โดยใช้วิธีแก้ปัญหาที่ง่ายมากนี้
$("input.numbers").keypress(function(event) {
return /\d/.test(String.fromCharCode(event.keyCode));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numbers" name="field_name" />
ฉันอ้างถึงลิงค์นี้สำหรับการแก้ปัญหา มันทำงานได้อย่างสมบูรณ์แบบ !!!
decimal
ระหว่าง0.0
ไป24.0
ฉันไม่สามารถที่จะปล่อยให้มันใส่.
แอตทริบิวต์รูปแบบใน HTML5 ระบุการแสดงออกปกติที่มีการตรวจสอบค่าขององค์ประกอบ
<input type="text" pattern="[0-9]{1,3}" value="" />
หมายเหตุ: แอ็ตทริบิวต์ pattern ทำงานกับชนิดอินพุตต่อไปนี้: text, search, url, tel, email และรหัสผ่าน
[0-9] สามารถถูกแทนที่ด้วยเงื่อนไขการแสดงออกปกติใด ๆ
{1,3} เพราะมันหมายถึงขั้นต่ำ 1 และสูงสุด 3 หลักที่สามารถป้อน
decimal
ระหว่าง0.0
ไป24.0
ฉันไม่สามารถที่จะปล่อยให้มันใส่.
สิ่งที่ค่อนข้างง่ายโดยใช้jQuery.validate
$(document).ready(function() {
$("#formID").validate({
rules: {
field_name: {
numericOnly:true
}
}
});
});
$.validator.addMethod('numericOnly', function (value) {
return /^[0-9]+$/.test(value);
}, 'Please only enter numeric values (0-9)');
ฟังก์ชัน suppressNonNumericInput (เหตุการณ์) {
if( !(event.keyCode == 8 // backspace
|| event.keyCode == 46 // delete
|| (event.keyCode >= 35 && event.keyCode <= 40) // arrow keys/home/end
|| (event.keyCode >= 48 && event.keyCode <= 57) // numbers on keyboard
|| (event.keyCode >= 96 && event.keyCode <= 105)) // number on keypad
) {
event.preventDefault(); // Prevent character input
}
}
decimal
ระหว่าง0.0
ถึง24.0
ฉันไม่สามารถปล่อยให้มันเข้าสู่.
ฉันมาถึงทางออกที่ดีและเรียบง่ายซึ่งไม่ได้ป้องกันผู้ใช้จากการเลือกข้อความหรือคัดลอกการวางเหมือนวิธีการแก้ปัญหาอื่น ๆ สไตล์ jQuery :)
$("input.inputPhone").keyup(function() {
var jThis=$(this);
var notNumber=new RegExp("[^0-9]","g");
var val=jThis.val();
//Math before replacing to prevent losing keyboard selection
if(val.match(notNumber))
{ jThis.val(val.replace(notNumber,"")); }
}).keyup(); //Trigger on page load to sanitize values set by server
คุณสามารถใช้ฟังก์ชัน JavaScript นี้:
function maskInput(e) {
//check if we have "e" or "window.event" and use them as "event"
//Firefox doesn't have window.event
var event = e || window.event
var key_code = event.keyCode;
var oElement = e ? e.target : window.event.srcElement;
if (!event.shiftKey && !event.ctrlKey && !event.altKey) {
if ((key_code > 47 && key_code < 58) ||
(key_code > 95 && key_code < 106)) {
if (key_code > 95)
key_code -= (95-47);
oElement.value = oElement.value;
} else if(key_code == 8) {
oElement.value = oElement.value;
} else if(key_code != 9) {
event.returnValue = false;
}
}
}
และคุณสามารถผูกมันไว้กับกล่องข้อความของคุณเช่นนี้:
$(document).ready(function() {
$('#myTextbox').keydown(maskInput);
});
ฉันใช้ข้อมูลด้านบนในการผลิตและทำงานได้อย่างสมบูรณ์และเป็นเบราว์เซอร์ข้าม นอกจากนี้มันไม่ได้ขึ้นอยู่กับ jQuery ดังนั้นคุณสามารถผูกไว้กับกล่องข้อความของคุณด้วย JavaScript แบบอินไลน์:
<input type="text" name="aNumberField" onkeydown="javascript:maskInput()"/>
ฉันคิดว่ามันจะช่วยให้ทุกคน
$('input.valid-number').bind('keypress', function(e) {
return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ;
})
if(event.which!=8 && event.which!=0 && (event.which<48 || event.which>57) && (event.which<96 || event.which>105)) return;
ฉันเขียนของฉันขึ้นอยู่กับการโพสต์ของ @ user261922 ข้างต้นปรับเปลี่ยนเล็กน้อยเพื่อให้คุณสามารถเลือกทั้งหมดแท็บและสามารถจัดการฟิลด์ "number only" หลายรายการในหน้าเดียวกัน
var prevKey = -1, prevControl = '';
$(document).ready(function () {
$(".OnlyNumbers").keydown(function (event) {
if (!(event.keyCode == 8 // backspace
|| event.keyCode == 9 // tab
|| event.keyCode == 17 // ctrl
|| event.keyCode == 46 // delete
|| (event.keyCode >= 35 && event.keyCode <= 40) // arrow keys/home/end
|| (event.keyCode >= 48 && event.keyCode <= 57) // numbers on keyboard
|| (event.keyCode >= 96 && event.keyCode <= 105) // number on keypad
|| (event.keyCode == 65 && prevKey == 17 && prevControl == event.currentTarget.id)) // ctrl + a, on same control
) {
event.preventDefault(); // Prevent character input
}
else {
prevKey = event.keyCode;
prevControl = event.currentTarget.id;
}
});
});
นี่เป็นวิธีแก้ปัญหาอย่างรวดเร็วที่ฉันสร้างเมื่อไม่นานมานี้ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ในบทความของฉัน:
http://ajax911.com/numbers-numeric-field-jquery/
$("#textfield").bind("keyup paste", function(){
setTimeout(jQuery.proxy(function() {
this.val(this.val().replace(/[^0-9]/g, ''));
}, $(this)), 0);
});
คุณต้องการอนุญาตแท็บ:
$("#txtboxToFilter").keydown(function(event) {
// Allow only backspace and delete
if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 ) {
// let it happen, don't do anything
}
else {
// Ensure that it is a number and stop the keypress
if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
event.preventDefault();
}
}
});
นี่คือคำตอบที่ใช้โรงงาน jQuery UI Widget คุณสามารถปรับแต่งสิ่งที่ตัวละครได้รับอนุญาตได้อย่างง่ายดาย
$('input').numberOnly({
valid: "0123456789+-.$,"
});
ที่จะช่วยให้ตัวเลขสัญญาณตัวเลขและจำนวนเงินดอลลาร์
$.widget('themex.numberOnly', {
options: {
valid : "0123456789",
allow : [46,8,9,27,13,35,39],
ctrl : [65],
alt : [],
extra : []
},
_create: function() {
var self = this;
self.element.keypress(function(event){
if(self._codeInArray(event,self.options.allow) || self._codeInArray(event,self.options.extra))
{
return;
}
if(event.ctrlKey && self._codeInArray(event,self.options.ctrl))
{
return;
}
if(event.altKey && self._codeInArray(event,self.options.alt))
{
return;
}
if(!event.shiftKey && !event.altKey && !event.ctrlKey)
{
if(self.options.valid.indexOf(String.fromCharCode(event.keyCode)) != -1)
{
return;
}
}
event.preventDefault();
});
},
_codeInArray : function(event,codes) {
for(code in codes)
{
if(event.keyCode == codes[code])
{
return true;
}
}
return false;
}
});
ดูเหมือนว่าจะไม่แตก
// Prevent NULL input and replace text.
$(document).on('change', 'input[type="number"]', function (event) {
this.value = this.value.replace(/[^0-9\.]+/g, '');
if (this.value < 1) this.value = 0;
});
// Block non-numeric chars.
$(document).on('keypress', 'input[type="number"]', function (event) {
return (((event.which > 47) && (event.which < 58)) || (event.which == 13));
});
จำเป็นต้องตรวจสอบให้แน่ใจว่าคุณมีแป้นตัวเลขและปุ่มแท็บทำงานด้วย
// Allow only backspace and delete
if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9) {
// let it happen, don't do anything
}
else {
// Ensure that it is a number and stop the keypress
if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) {
}
else {
event.preventDefault();
}
}
ฉันต้องการความช่วยเหลือเล็กน้อยและฉันสร้างเวอร์ชั่นของฉันonlyNumbers
ฟังก์ชั่น
function onlyNumbers(e){
var keynum;
var keychar;
if(window.event){ //IE
keynum = e.keyCode;
}
if(e.which){ //Netscape/Firefox/Opera
keynum = e.which;
}
if((keynum == 8 || keynum == 9 || keynum == 46 || (keynum >= 35 && keynum <= 40) ||
(event.keyCode >= 96 && event.keyCode <= 105)))return true;
if(keynum == 110 || keynum == 190){
var checkdot=document.getElementById('price').value;
var i=0;
for(i=0;i<checkdot.length;i++){
if(checkdot[i]=='.')return false;
}
if(checkdot.length==0)document.getElementById('price').value='0';
return true;
}
keychar = String.fromCharCode(keynum);
return !isNaN(keychar);
}
เพียงเพิ่มแท็กอินพุต "... อินพุต ... id =" price "onkeydown =" ส่งคืน onlyNumber (เหตุการณ์) "... " และคุณเสร็จแล้ว;)
ฉันยังต้องการที่จะตอบ :)
$('.justNum').keydown(function(event){
var kc, num, rt = false;
kc = event.keyCode;
if(kc == 8 || ((kc > 47 && kc < 58) || (kc > 95 && kc < 106))) rt = true;
return rt;
})
.bind('blur', function(){
num = parseInt($(this).val());
num = isNaN(num) ? '' : num;
if(num && num < 0) num = num*-1;
$(this).val(num);
});
นั่นมัน ... แค่ตัวเลข :) เกือบจะใช้ได้กับ 'เบลอ' แต่ ...
วิธีง่ายๆในการตรวจสอบว่าการป้อนค่าเป็นตัวเลขคือ:
var checknumber = $('#textbox_id').val();
if(jQuery.isNumeric(checknumber) == false){
alert('Please enter numeric value');
$('#special_price').focus();
return;
}
เพียงแค่ต้องใช้วิธีนี้ใน Jquery และคุณสามารถตรวจสอบกล่องข้อความของคุณที่จะยอมรับหมายเลขเท่านั้น
function IsNumberKeyWithoutDecimal(element) {
var value = $(element).val();
var regExp = "^\\d+$";
return value.match(regExp);
}
ลองใช้วิธีแก้ปัญหาที่นี่
คุณสามารถลองใส่หมายเลข HTML5:
<input type="number" placeholder="enter the number" min="0" max="9">
องค์ประกอบแท็กอินพุตนี้จะมีค่าระหว่าง 0 ถึง 9 เท่านั้นเนื่องจากแอตทริบิวต์ min ถูกตั้งค่าเป็น 0 และแอตทริบิวต์สูงสุดถูกตั้งค่าเป็น 9
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเยี่ยมชมhttp://www.w3schools.com/html/html_form_input_types.asp