จะอนุญาตให้ใช้เฉพาะตัวเลข (0-9) ในอินพุต HTML โดยใช้ jQuery ได้อย่างไร


901

ฉันกำลังสร้างหน้าเว็บที่ฉันมีช่องป้อนข้อความที่ฉันต้องการอนุญาตให้ใช้เฉพาะอักขระที่เป็นตัวเลขเช่น (0,1,2,3,4,5 ... 9) 0-9

ฉันจะทำสิ่งนี้โดยใช้ jQuery ได้อย่างไร


73
โปรดทราบว่าคุณไม่สามารถพึ่งพาการตรวจสอบฝั่งไคลเอ็นต์ - คุณต้องตรวจสอบความถูกต้องบนเซิร์ฟเวอร์ในกรณีที่ผู้ใช้ปิด JavaScript หรือไม่ได้ใช้เบราว์เซอร์ที่เข้ากันได้กับ JavaScript
cjk

45
คุณเคยคิด html5 ไหม? <input type = "number" /> ด้วยแอตทริบิวต์ต่ำสุดและสูงสุดคุณสามารถ จำกัด การป้อนข้อมูลด้วย
ZX12R

5
ฉันคิดว่าคุณควรตรวจสอบค่าอินพุตในเหตุการณ์คีย์อัพและไม่ตรวจสอบรหัสคีย์เนื่องจากมีความน่าเชื่อถือมากกว่าในความแตกต่างของคีย์บอร์ดและสิ่งที่ไม่
ริชาร์ด

13
ฉันอย่างเห็นด้วยกับริชาร์ด: ไม่ไม่ใช้การพิมพ์ซ้ำ คำตอบที่ยอมรับไม่สามารถใช้กับแป้นพิมพ์ภาษาฝรั่งเศสได้ตัวอย่างเช่นเนื่องจากคุณต้องกด "Shift" เพื่อพิมพ์ตัวเลขบนแป้นพิมพ์เหล่านั้น รหัสมีความเสี่ยงเกินไป IMHO
MiniQuark

3
@ ZX12R ไม่ทำงานใน IE เวอร์ชันปัจจุบันใด ๆ ทุกอย่างดีและดีที่จะใช้โค้ดล่าสุดกับเนื้อหาของคุณเองเพื่อรักษาความสดใหม่ แต่นี่ไม่ใช่ตัวเลือกสำหรับโครงการมืออาชีพเกือบทุกประเภท caniuse.com/#feat=input-number
Eric

คำตอบ:


1260

หมายเหตุ:นี่เป็นคำตอบที่อัพเดทแล้ว ความคิดเห็นด้านล่างอ้างถึงเวอร์ชันเก่าซึ่งยุ่งกับรหัส

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 โปรดทราบว่าคุณยังต้องทำการตรวจสอบฝั่งเซิร์ฟเวอร์!

JavaScript ที่แท้จริง (ไม่มี jQuery)

jQuery ไม่จำเป็นจริง ๆ สำหรับสิ่งนี้คุณสามารถทำสิ่งเดียวกันกับ JavaScript ที่บริสุทธิ์ได้เช่นกัน ดูคำตอบนี้

HTML 5

HTML 5 มีโซลูชันแบบเนทีฟด้วย<input type="number">(ดูข้อกำหนด ) แต่โปรดทราบว่าการสนับสนุนเบราว์เซอร์แตกต่างกันไป:

  • เบราว์เซอร์ส่วนใหญ่จะตรวจสอบความถูกต้องของอินพุตเมื่อส่งแบบฟอร์มไม่ใช่เมื่อพิมพ์
  • เบราว์เซอร์มือถือส่วนใหญ่ไม่สนับสนุนstep, minและmaxคุณลักษณะ
  • Chrome (รุ่น 71.0.3578.98) ยังคงอนุญาตให้ผู้ใช้ป้อนอักขระeและEลงในฟิลด์ ดูคำถามนี้ด้วย
  • Firefox (รุ่น 64.0) และ Edge (EdgeHTML เวอร์ชัน 17.17134) ยังคงอนุญาตให้ผู้ใช้ป้อนข้อความใด ๆลงในฟิลด์

ลองตัวเองใน w3schools.com


45
ขอบคุณ! event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 190ถ้าคุณต้องการทศนิยม
Michael L Watson

9
เพิ่ม keyCodes 37 และ 39 เพื่ออนุญาตการนำทางลูกศรซ้ายและขวาในกล่อง txt ตัวอย่างเช่น: if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39)
Anthony Queen

22
ooo เพิ่งหยิบยกประเด็นนี้จากผู้ทดสอบของเรา คุณต้องป้องกันไม่ให้ผู้ใช้กดปุ่ม Shift ค้างไว้และกดปุ่มตัวเลขมิฉะนั้นการป้อนข้อมูลจะช่วยให้! @ # $% ^ & * ()
อัลเลนไรซ์

6
ยืนยันการเปลี่ยนแปลงข้อผิดพลาด + นอกจากนี้แป้นตัวเลข ALT + ช่วยอะไรได้มาก (เช่น Alt + 321 = A, Alt + 322 = B, ฯลฯ ... ) อีกกรณีสำหรับการตรวจสอบฝั่งเซิร์ฟเวอร์
Anthony Queen

140
ฉันไม่เห็นด้วยกับคำตอบนี้จริงๆมันเสี่ยงเกินไปที่จะเล่นกับรหัสเพราะคุณไม่สามารถแน่ใจได้ว่ารูปแบบแป้นพิมพ์คืออะไร ตัวอย่างเช่นบนแป้นพิมพ์ภาษาฝรั่งเศสผู้ใช้ต้องกด shift เพื่อพิมพ์ตัวเลข ดังนั้นรหัสนี้จะไม่ทำงานเลย ดังนั้นโปรดไปตรวจสอบแทนการแฮ็กรหัส
MiniQuark

182

นี่คือฟังก์ชั่นที่ฉันใช้:

// 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();

2
ฉันพบว่ามีประโยชน์นี้ แต่ฉันพบข้อผิดพลาด "น่ารำคาญ" เมื่อฉันใช้สิ่งนี้กับ iMac ของฉันจะอนุญาตให้ใช้ตัวอักษรบางตัวเช่น a และ e ดูเหมือนว่าหมายเลขปุ่มกดบนพีซีเป็นตัวอักษรบน iMac และแป้นพิมพ์ Mac นั้นเหมือนกับหมายเลขปกติ ใครรู้วิธีที่จะทำให้มันทำงานได้ทั้งบน mac และพีซี?
Volmar

3
คีย์ "Home", "End" ก็ไม่ทำงานเช่นกัน นี่เป็นทางออกที่ดีกว่าที่ Peter แนะนำ: west-wind.com/weblog/posts/2011/Apr/22/…
bman

ทำไมถึงมีreturn this.each(function() ?
powtac

2
@powtac - เพื่อให้คุณสามารถโทร. ForceNumericOnly () บนวัตถุหลาย ๆ ตัวอย่างเช่น ... $ ("input [type = 'text']"). ForceNumericOnly ()
Oliver Pearmain

1
@powtac eachจากreturn this.each(function()คืออนุญาตให้มีวัตถุหลายรายการตามที่ HaggleLad กล่าวและreturnส่วนหนึ่งคือการส่งคืนวัตถุ jQuery กลับไปที่ผู้โทรเพื่ออนุญาตการผูกมัดเช่น$("input[type='text'").ForceNumericOnly().show()
Jose Rui Santos

149

แบบอินไลน์:

<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">


2
สิ่งนี้จะย้ายเครื่องหมายรูปหมวกไปยังจุดสิ้นสุดแม้ว่าผู้ใช้จะกดปุ่มลูกศรซ้าย
Phrogz

1
@phrogz onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')"ลองนี้
แพทริคฟิชเชอ

สิ่งนี้ทำงานได้อย่างสมบูรณ์และป้องกัน Shift + หมายเลขไม่เหมือนที่กล่าวไว้
Nick Hartley

5
@ mhenry1384 นั่นเป็นพฤติกรรมที่คาดหวัง ฉันคิดว่ามันเป็นคำติชมที่ดี แต่ถ้าคุณไม่ชอบสิ่งนั้นแนวทางของรหัสสำคัญจะเป็นสิ่งที่คุณกำลังมองหา
แพทริคฟิชเชอร์

2
คุณสามารถปรับเปลี่ยนเป็น/[^0-9]|^0+(?!$)/gเพื่อป้องกันซีรีย์นำที่เป็นศูนย์
Johny Skovdal

105

คุณสามารถใช้นิพจน์ทั่วไป 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();
    }

11
ดูคำตอบของฉันสำหรับการดำเนินการตามวิธีนี้
แพทริคฟิชเชอร์

จะไม่ใช้เวลาประมวลผลน้อยลงในการตรวจสอบการกดปุ่มตัวเลข แต่จากนั้นตรวจสอบการแสดงออกปกติ?
andrsnn

87

คุณสามารถใช้กับกิจกรรมอินพุตเช่นนี้:

$(document).on("input", ".numeric", function() {
    this.value = this.value.replace(/\D/g,'');
});

แต่รหัสสิทธิพิเศษนี้คืออะไร?

  • มันทำงานบนเบราว์เซอร์มือถือ (keydown และ keyCode มีปัญหา)
  • มันทำงานบน AJAX ที่สร้างเนื้อหาด้วยเช่นกันเพราะเรากำลังใช้ "เปิด"
  • ประสิทธิภาพที่ดีกว่า keydown ตัวอย่างเช่นเมื่อวางเหตุการณ์

6
ฉันรู้สึกว่านี่เป็นวิธีแก้ปัญหา (และง่ายกว่า) ที่แข็งแกร่งกว่าคำตอบที่ยอมรับ
Jeremy Harris

ง่ายยิ่งขึ้นหากใช้การแทนที่ (/ \ D / g, '')
Alfergon

สวัสดีวิธีการที่ฉันสามารถมั่นใจได้ว่าค่าตัวเลขด้วยdecimalระหว่าง0.0ไป24.0ฉันไม่สามารถที่จะปล่อยให้มันใส่.
หม้อแปลง

ฉันอยากจะแนะนำให้ใช้this.value = Number(this.value.replace(/\D/g, ''));
HasanG

คำตอบที่ดีช่วยให้สลับได้อย่างง่ายดายไม่ว่าจะเป็นอินพุทเป็นตัวเลขหรือไม่โดยการสลับคลาส
raklos

55

สั้นและหวาน - แม้ว่ามันจะไม่ได้รับความสนใจมากหลังจากผ่านไป 30+ คำตอบ)

  $('#number_only').bind('keyup paste', function(){
        this.value = this.value.replace(/[^0-9]/g, '');
  });

5
ฉันจะแทนที่ keyup โดยการป้อนข้อมูลมิฉะนั้นคุณสามารถรักษาตัวอักษรที่กดแล้วคลิกเพื่อดึงโฟกัสออกจากกล่องข้อความและมันจะปล่อยให้ข้อความตามเดิม การป้อนข้อมูลมั่นใจได้ว่าสิ่งนี้จะไม่เกิดขึ้น
WizLiz

ขอบคุณสำหรับ regex - แต่นี่เป็นตัวจัดการเหตุการณ์ที่ดีกว่า: $ ('# number_only'). on ('input propertychange', function () {this.value = this.value.replace (/ [^ 0-9] / g, '');});
BradM

3
FYI - คำถามไม่ถามคำถามนี้ แต่ไม่อนุญาตให้ใช้ทศนิยม (เช่น 12.75) การผูก "อินพุต" แทนที่จะเป็น "keyup" จะทำให้ UX ที่ราบรื่นขึ้นแทนที่จะมองเห็นตัวละครของพวกเขาเป็นเสี้ยววินาทีแล้วจึงนำออก
พอล

44

การใช้งานจาวาสคริปต์ทำงานisNaN ,

if (isNaN($('#inputid').val()))

if (isNaN (document.getElementById ('inputid'). val ())

if (isNaN(document.getElementById('inputid').value))

อัปเดต: และนี่เป็นบทความที่ดีที่พูดถึง แต่ใช้ jQuery: การจำกัด การป้อนข้อมูลในกล่องข้อความ HTML เป็นค่าตัวเลข


40
ดี ... "ไม่ได้ใช้ JQuery" ยกเว้นในส่วนของตัวอย่างของคุณที่ใช้ JQuery ...
GalacticCowboy

document.getElementById('inputid').val()เพื่อน .. ที่ยังคง jquery .val()เป็นสิ่งที่ jquery ใช้.value
mpen


สวัสดีวิธีการที่ฉันสามารถมั่นใจได้ว่าค่าตัวเลขด้วยdecimalระหว่าง0.0ไป24.0ฉันไม่สามารถที่จะปล่อยให้มันใส่.
หม้อแปลง

28
$(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


6
ว้าวว่างเปล่าถ้า "บล็อก" และหมายเลขมายากลทั้งคู่! ฉันเพิ่งโยนเข้าไปในปากของฉันเล็กน้อย : D แต่อย่างจริงจังทำไมไปที่ปัญหาทั้งหมดนี้เมื่อคุณสามารถจับคู่อินพุตกับ regex /^^.\durrency+$/ และ '8' หมายถึงอะไร
Alan Moore

@Alan: ฮ่าฮ่าฉันไม่มีความคิด - ฉันคัดลอกโดยตรงจากแหล่งที่มา ฉันจะเขียน "if (event.keyCode! = 46 && event.keyCode! = 8)" แทนหรือใช้ regex ตามที่คุณพูด ฉันคิดว่า 8 แทนปุ่มลบ
Ivar

4
ลองกด Shift + 8 เช่น - การตรวจสอบของคุณจะอนุญาตให้ * เข้า
Anton

นี่เป็นสิ่งที่ดีจะดีกว่านี้ถ้าจัดการกับปุ่ม Shift + ตัวเลข (ตัวอักษรพิเศษ! @ # $% ^ .. )
Shyju

27

ฉันใช้สิ่งนี้ในไฟล์ js ทั่วไปภายในของเรา ฉันเพิ่งเพิ่มคลาสให้กับอินพุตใด ๆ ที่ต้องการพฤติกรรมนี้

$(".numericOnly").keypress(function (e) {
    if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});

1
รหัสนีซ, สง่างามและมีประโยชน์! ขอบคุณ แต่คุณต้องเพิ่มกิจกรรมการคีย์และการกดคีย์
Silvio Delgado

25

เรียบง่ายสำหรับฉันคือ

jQuery('.plan_eff').keyup(function () {     
  this.value = this.value.replace(/[^1-9\.]/g,'');
});

7
เพียงแค่ต้องแน่ใจว่าคุณใช้this.value.replace(/[^0-9\.]/g,'');เพื่อรวมข้อกำหนดของ OP ของ 0-9
Chalise

24

ทำไมจึงซับซ้อน คุณไม่จำเป็นต้องมี jQuery เพราะมีแอตทริบิวต์รูปแบบ HTML5:

<input type="text" pattern="[0-9]*">

สิ่งที่ยอดเยี่ยมคือมันแสดงแป้นพิมพ์ตัวเลขบนอุปกรณ์มือถือซึ่งดีกว่าการใช้ jQuery


2
ควรมีคะแนนมากกว่านี้มาก หากมีสิ่งใดคุณสามารถเพิ่ม regex ถอยกลับสำหรับเบราว์เซอร์ที่ไม่ใช่ html5 - แต่การตรวจสอบความถูกต้องของข้อมูลควรจัดการกับฝั่งเซิร์ฟเวอร์ต่อไป
Markus

ดูเหมือนว่าเบราว์เซอร์ส่วนใหญ่จะได้รับการสนับสนุนเป็นอย่างดีในขณะนี้ดังนั้นการสนับสนุน modernizr จึงไม่สำคัญ: caniuse.com/#search=pattern Safari ทำงานได้เป็นอย่างดีแม้ว่าจะได้รับการสนับสนุนเป็นบางส่วนในไซต์นี้ก็ตาม ลองมัน!
แขก

@guest ขอบคุณมากสำหรับสิ่งนี้ คำตอบที่เร็วและง่ายที่สุด! คำตอบยอดนิยมในความคิดของฉัน
BinaryJoe01

19

คุณสามารถทำสิ่งเดียวกันได้โดยใช้วิธีแก้ปัญหาที่ง่ายมากนี้

$("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" />

ฉันอ้างถึงลิงค์นี้สำหรับการแก้ปัญหา มันทำงานได้อย่างสมบูรณ์แบบ !!!


อาจจะเป็นการดีกว่าที่จะอนุญาต ตัวเลขทศนิยม
Zango

งานนี้สมบูรณ์แบบใน crome แต่ไม่ใช่ใน Mozilla FireFox
Kirataka

สวัสดีวิธีการที่ฉันสามารถมั่นใจได้ว่าค่าตัวเลขด้วยdecimalระหว่าง0.0ไป24.0ฉันไม่สามารถที่จะปล่อยให้มันใส่.
หม้อแปลง

ไม่ทำงานกับการคัดลอกวาง
mrid


14

แอตทริบิวต์รูปแบบใน 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ฉันไม่สามารถที่จะปล่อยให้มันใส่.
หม้อแปลง

1
@transformer ลองใช้ <input type = "number" pattern = "[0-9] + ([\.,] [0-9] +)?" step = "0.01">
vickisys

11

สิ่งที่ค่อนข้างง่ายโดยใช้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)');

8

ฟังก์ชัน 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ฉันไม่สามารถปล่อยให้มันเข้าสู่.
Transformer

8

ฉันมาถึงทางออกที่ดีและเรียบง่ายซึ่งไม่ได้ป้องกันผู้ใช้จากการเลือกข้อความหรือคัดลอกการวางเหมือนวิธีการแก้ปัญหาอื่น ๆ สไตล์ 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

เฮ้ฉันใช้สิ่งนี้ แต่สิ่งที่ฉันกำลังมองหาจริงๆคือการอนุญาตให้เขาดอทเช่น 1.2 หรือ 3.455 เช่นนั้น
Vivekh

8

คุณสามารถใช้ฟังก์ชัน 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()"/>

สิ่งนี้จะล้มเหลวเมื่อมีคนวางข้อความที่ไม่ใช่ตัวเลขในอินพุต IDE ใด ๆ ที่เราสามารถเอาชนะสิ่งนี้ได้? ไม่สามารถปิดใจของฉันมากกว่านี้
Kiran Ruth R

7

ฉันคิดว่ามันจะช่วยให้ทุกคน

  $('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;
tomvo

6

ฉันเขียนของฉันขึ้นอยู่กับการโพสต์ของ @ 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;
        }
    });
});

6

นี่เป็นวิธีแก้ปัญหาอย่างรวดเร็วที่ฉันสร้างเมื่อไม่นานมานี้ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ในบทความของฉัน:

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);
});

6

คุณต้องการอนุญาตแท็บ:

$("#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(); 
        }   
    }
});

6

นี่คือคำตอบที่ใช้โรงงาน 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;
    }
});

สิ่งนี้ทำให้แน่ใจว่า $ และจากนั้น + - เป็นอักขระตัวแรกหรือตัวแรก / ตัวที่สองและจากนั้นจุดทศนิยมเพียง 1
gordon

6

ดูเหมือนว่าจะไม่แตก

// 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));
});

5

จำเป็นต้องตรวจสอบให้แน่ใจว่าคุณมีแป้นตัวเลขและปุ่มแท็บทำงานด้วย

 // 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();
                }
            }

5

ฉันต้องการความช่วยเหลือเล็กน้อยและฉันสร้างเวอร์ชั่นของฉัน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 (เหตุการณ์) "... " และคุณเสร็จแล้ว;)


5

ฉันยังต้องการที่จะตอบ :)

    $('.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);
    });

นั่นมัน ... แค่ตัวเลข :) เกือบจะใช้ได้กับ 'เบลอ' แต่ ...


5

วิธีง่ายๆในการตรวจสอบว่าการป้อนค่าเป็นตัวเลขคือ:

var checknumber = $('#textbox_id').val();

    if(jQuery.isNumeric(checknumber) == false){
        alert('Please enter numeric value');
        $('#special_price').focus();
        return;
    }

5

เพียงแค่ต้องใช้วิธีนี้ใน Jquery และคุณสามารถตรวจสอบกล่องข้อความของคุณที่จะยอมรับหมายเลขเท่านั้น

function IsNumberKeyWithoutDecimal(element) {    
var value = $(element).val();
var regExp = "^\\d+$";
return value.match(regExp); 
}

ลองใช้วิธีแก้ปัญหาที่นี่


5

คุณสามารถลองใส่หมายเลข 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.