Làm cách nào để chỉ cho phép số (0-9) trong hộp nhập HTML bằng jQuery?


901

Tôi đang tạo một trang web nơi tôi có trường văn bản đầu vào, trong đó tôi muốn chỉ cho phép các ký tự số như (0,1,2,3,4,5 ... 9) 0-9.

Làm thế nào tôi có thể làm điều này bằng cách sử dụng jQuery?


73
Hãy nhớ rằng bạn không thể dựa vào xác thực phía máy khách - bạn cũng cần xác thực trên máy chủ trong trường hợp người dùng tắt JavaScript hoặc không sử dụng trình duyệt tương thích JavaScript.
cjk

45
bạn đã xem xét html5 chưa? <loại đầu vào = "số" />. với các thuộc tính tối thiểu và tối đa, bạn cũng có thể hạn chế nhập liệu
ZX12R

5
Tôi nghĩ bạn nên kiểm tra các giá trị đầu vào trong sự kiện gõ phím và không kiểm tra mã phím, bởi vì nó đáng tin cậy hơn nhiều về sự khác biệt trong bàn phím và những gì không.
Richard

13
Tôi hoàn toàn đồng ý với Richard: không sử dụng mã khóa. Câu trả lời được chấp nhận không hoạt động trên bàn phím tiếng Pháp, ví dụ, vì bạn cần nhấn "Shift" để nhập số trên các bàn phím đó. Mã khóa quá rủi ro, IMHO.
MiniQuark

3
@ ZX12R Không hoạt động trong mọi phiên bản IE hiện tại. Thật tốt và tốt khi sử dụng mã mới nhất trên công cụ của riêng bạn để giữ cho bản mới, nhưng đây thực sự không phải là một lựa chọn cho hầu hết các dự án chuyên nghiệp. caniuse.com/#feat=input-number
Eric

Câu trả lời:


1260

Lưu ý: Đây là một câu trả lời cập nhật. Nhận xét bên dưới đề cập đến một phiên bản cũ gây rối với mã phím.

jQuery

Hãy thử nó trên JSFiddle .

Không có triển khai jQuery gốc cho việc này, nhưng bạn có thể lọc các giá trị đầu vào của văn bản <input>bằng inputFilterplugin sau (hỗ trợ Sao chép + Dán, Kéo + Thả, phím tắt, thao tác menu ngữ cảnh, phím không gõ, vị trí dấu mũ, khác nhau bố trí bàn phím và tất cả các trình duyệt kể từ 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));

Bây giờ bạn có thể sử dụng inputFilterplugin để cài đặt bộ lọc đầu vào:

$(document).ready(function() {
  $("#myTextBox").inputFilter(function(value) {
    return /^\d*$/.test(value);    // Allow digits only, using a RegExp
  });
});

Xem bản demo của JSFiddle để biết thêm các ví dụ về bộ lọc đầu vào. Cũng lưu ý rằng bạn vẫn phải xác nhận phía máy chủ!

JavaScript thuần túy (không có jQuery)

jQuery thực sự không cần thiết cho việc này, bạn cũng có thể làm điều tương tự với JavaScript thuần túy. Xem câu trả lời này .

HTML 5

HTML 5 có một giải pháp riêng với <input type="number">(xem thông số kỹ thuật ), nhưng lưu ý rằng hỗ trợ trình duyệt khác nhau:

  • Hầu hết các trình duyệt sẽ chỉ xác nhận đầu vào khi gửi biểu mẫu chứ không phải khi nhập.
  • Hầu hết các trình duyệt di động không hỗ trợ step, minmaxcác thuộc tính.
  • Chrome (phiên bản 71.0.3578.98) vẫn cho phép người dùng nhập các ký tự eEvào trường. Cũng xem câu hỏi này .
  • Firefox (phiên bản 64.0) và Edge (EdgeHTML phiên bản 17.17134) vẫn cho phép người dùng nhập bất kỳ văn bản nào vào trường.

Hãy thử nó trên w3schools.com .


45
Cảm ơn! event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 190 nếu bạn muốn số thập phân
Michael L Watson

9
Thêm keyCodes 37 và 39 để cho phép điều hướng mũi tên trái và phải trong hộp txt chẳng hạn: if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39)
Nữ hoàng Anthony

22
ooo, chỉ cần chọn một vấn đề cho điều này từ những người thử nghiệm của chúng tôi. Bạn phải ngăn người dùng giữ phím shift và nhấn các phím số, nếu không, đầu vào sẽ cho phép! @ # $% ^ & * ()
Allen Rice

6
Xác nhận sự thay đổi + lỗi. Ngoài ra, ALT + số phím cho phép khá nhiều thứ (ví dụ Alt + 321 = A, Alt + 322 = B, v.v ...). Một trường hợp khác để xác nhận phía máy chủ.
Nữ hoàng Anthony

140
Tôi thực sự không đồng ý với câu trả lời này: thực sự quá rủi ro khi chơi với mã phím, bởi vì bạn không thể chắc chắn bố cục bàn phím là gì. Ví dụ, trên bàn phím tiếng Pháp, người dùng phải nhấn shift để nhập số. Vì vậy, mã này sẽ không hoạt động. Vì vậy, vui lòng đi xác nhận thay vì hack mã khóa này.
MiniQuark

182

Đây là chức năng tôi sử dụng:

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

Sau đó, bạn có thể gắn nó vào điều khiển của mình bằng cách thực hiện:

$("#yourTextBoxName").ForceNumericOnly();

2
tôi thấy điều này hữu ích, nhưng tôi đã tìm thấy một "lỗi" anoying. Khi tôi sử dụng cái này trên iMac, nó cho phép một số chữ cái, như a và e. có vẻ như số bàn phím trên máy tính là chữ cái trên iMac và bàn phím Mac giống như các số thông thường. Bất cứ ai biết làm thế nào để làm cho nó hoạt động trên cả mac và pc?
Volmar

3
Phím "Home", "End" cũng không hoạt động. Đây là một giải pháp tốt hơn mà Peter gợi ý: west-wind.com/weblog/posts/2011/Apr/22/...
bman

Tại sao có một return this.each(function() ?
powtac

2
@powtac - vì vậy bạn có thể gọi .orceNumericOnly () trên nhiều đối tượng. Ví dụ: $ ("input [type = 'text']"). ForceNumericOnly ()
Oliver Pearmain

1
@powtac eachtừ return this.each(function()là để cho phép nhiều đối tượng như HaggleLad đã nói, và returnmột phần là trả lại đối tượng jQuery cho người gọi, để cho phép xâu chuỗi như$("input[type='text'").ForceNumericOnly().show()
Jose Rui Santos

149

Nội tuyến:

<input name="number" onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')">

Phong cách không phô trương (với 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
Thao tác này sẽ di chuyển dấu mũ đến cuối ngay cả khi người dùng đang nhấn phím mũi tên trái.
Phrogz

1
@phrogz, thử cái này : onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')".
Patrick Fisher

Điều này hoạt động hoàn hảo và ngăn số Shift + không giống như những người ở trên.
Nick Hartley

5
@ mhenry1384 Đó là hành vi dự kiến. Tôi thấy đó là một phản hồi tốt nhưng nếu bạn không thích điều đó, thì cách tiếp cận mã khóa sẽ là điều bạn đang tìm kiếm.
Patrick Fisher

2
Bạn có thể sửa đổi để /[^0-9]|^0+(?!$)/gngăn hàng loạt số không.
Johny Skovdal

105

Bạn chỉ có thể sử dụng một biểu thức chính quy JavaScript đơn giản để kiểm tra các ký tự số hoàn toàn:

/^[0-9]+$/.test(input);

Điều này trả về true nếu đầu vào là số hoặc sai nếu không.

hoặc cho mã khóa sự kiện, sử dụng đơn giản dưới đây:

     // 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
Xem câu trả lời của tôi để thực hiện phương pháp này.
Patrick Fisher

Sẽ không mất ít thời gian xử lý để kiểm tra phím bấm số hơn sau đó kiểm tra biểu thức chính quy?
andrsnn

87

Bạn có thể sử dụng cho sự kiện đầu vào như thế này:

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

Nhưng, đặc quyền mã này là gì?

  • Nó hoạt động trên các trình duyệt di động (keydown và keyCode có vấn đề).
  • Nó cũng hoạt động trên nội dung được tạo bởi AJAX, bởi vì chúng tôi đang sử dụng "bật".
  • Hiệu suất tốt hơn so với keydown, ví dụ như trên sự kiện dán.

6
Tôi cảm thấy như đây là một giải pháp mạnh mẽ hơn (và đơn giản hơn) so với câu trả lời được chấp nhận.
Jeremy Harris

Thậm chí đơn giản hơn nếu sử dụng thay thế (/ \ D / g, '')
Alfergon

hi, làm thế nào tôi có thể đảm bảo giá trị số với một decimalgiữa 0.0để 24.0tôi không thể để cho nó nhập.
biến

Tôi sẽ đề nghị sử dụngthis.value = Number(this.value.replace(/\D/g, ''));
HasanG

Câu trả lời hay, cho phép dễ dàng chuyển đổi xem đầu vào có phải là số hay không bằng cách bật lớp
raklos

55

Ngắn gọn và ngọt ngào - ngay cả khi điều này sẽ không bao giờ tìm thấy nhiều sự chú ý sau hơn 30 câu trả lời;)

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

5
Tôi sẽ thay thế keyup bằng đầu vào, nếu không bạn có thể duy trì một chữ cái được nhấn sau đó nhấp để lấy tiêu điểm ra khỏi hộp văn bản và nó để nguyên văn bản. đầu vào đảm bảo rằng điều này không thể xảy ra
WizLiz

Cảm ơn regex - nhưng đây là trình xử lý sự kiện tốt hơn: $ ('# number_only'). On ('input propertychange', function () {this.value = this.value.replace (/ [^ 0-9] / g, '');});
BradM

3
FYI - Câu hỏi không yêu cầu, nhưng điều này không cho phép số thập phân (ví dụ: 12,75). Liên kết "đầu vào" thay vì "keyup" giúp cho UX mượt mà hơn thay vì nhìn thấy ký tự của chúng trong một giây, sau đó loại bỏ nó.
Paul

44

Sử dụng chức năng JavaScript làNaN ,

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

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

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

Cập nhật: Và đây là một bài viết hay nói về nó nhưng sử dụng jQuery: Hạn chế nhập liệu trong các hộp văn bản HTML thành các giá trị số


40
Chà ... "Không sử dụng JQuery" ngoại trừ phần ví dụ của bạn đang sử dụng JQuery ...
GalacticCowboy

document.getElementById('inputid').val()anh bạn .. đó vẫn là jquery. .val()là một điều jquery. sử dụng.value
mpen 18/03


hi, làm thế nào tôi có thể đảm bảo giá trị số với một decimalgiữa 0.0để 24.0tôi không thể để cho nó nhập.
biến

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

Nguồn: http://snipt.net/GerryEng/jquery-making-textfield-only-accept-numeric-values


6
Wow, trống "nếu" khối và số ma thuật cả! Tôi chỉ ngậm trong miệng một chút. : D Nhưng nghiêm túc, tại sao lại đi đến tất cả những rắc rối này khi bạn chỉ có thể khớp đầu vào với regex / ^ [. Và '8' đại diện cho cái gì?
Alan Moore

@Alan: Haha, tôi không biết - tôi đã sao chép trực tiếp từ nguồn. Thay vào đó, tôi sẽ viết "if (event.keyCode! = 46 && event.keyCode! = 8)" hoặc sử dụng regex như bạn đã nói. Tôi cho rằng 8 đại diện cho phím xóa.
Ivar

4
Thử nhấn Shift + 8 chẳng hạn - xác thực của bạn sẽ cho phép * vào trong
Anton

Điều này thật tuyệt. Sẽ tốt hơn nhiều, Nếu nó xử lý phím Shift + Số (Các ký tự đặc biệt như! @ # $% ^ ..)
Shyju

27

Tôi sử dụng điều này trong tập tin js chung nội bộ của chúng tôi. Tôi chỉ thêm lớp vào bất kỳ đầu vào nào cần hành vi này.

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

1
Đẹp, thanh lịch và hữu ích mã! Cảm ơn. Nhưng bạn phải thêm các sự kiện keyup và keydown.
Silvio Delgado

25

Đơn giản hơn đối với tôi là

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

7
Chỉ cần chắc chắn rằng bạn sử dụng this.value.replace(/[^0-9\.]/g,'');để bao gồm các yêu cầu của OP là 0-9
Chalise

24

Sao lại phức tạp thế? Bạn thậm chí không cần jQuery vì có thuộc tính mẫu HTML5:

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

Điều thú vị là nó mang đến một bàn phím số trên thiết bị di động, cách này tốt hơn so với sử dụng jQuery.


2
Điều này nên có nhiều phiếu hơn. Nếu có bất cứ điều gì, bạn cũng có thể thêm regex dự phòng cho các trình duyệt không phải là html5 - nhưng việc xác thực dữ liệu phải được xử lý bằng mọi cách phía máy chủ.
Markus

Hiện tại có vẻ như nó được hỗ trợ tốt bởi hầu hết các trình duyệt, vì vậy hỗ trợ Modernizr không quá quan trọng: caniuse.com/#search=potype Safari hoạt động rất tốt mặc dù được liệt kê là hỗ trợ một phần trên trang web này. Thử nó!
khách

@guest Cảm ơn bạn rất nhiều vì điều này. Câu trả lời nhanh nhất và dễ nhất! Câu trả lời hàng đầu theo ý kiến ​​của tôi.
BinaryJoe01

19

Bạn có thể làm tương tự bằng cách sử dụng giải pháp rất đơn giản này

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

Tôi đã đề cập đến liên kết này cho giải pháp. Nó hoạt động hoàn hảo !!!


Có lẽ điều này là tốt hơn /\d|\./ để cho phép. số thập phân
Zango

Điều này hoạt động hoàn hảo trong crome. Nhưng không có trong Mozilla FireFox
Kirataka 28/03/2016

hi, làm thế nào tôi có thể đảm bảo giá trị số với một decimalgiữa 0.0để 24.0tôi không thể để cho nó nhập.
biến áp

không hoạt động với bản sao dán
mrid


14

Thuộc tính mẫu trong HTML5 chỉ định biểu thức chính quy mà giá trị của phần tử được kiểm tra.

  <input  type="text" pattern="[0-9]{1,3}" value="" />

Lưu ý: Thuộc tính mẫu hoạt động với các loại đầu vào sau: văn bản, tìm kiếm, url, tel, email và mật khẩu.

  • [0-9] có thể được thay thế bằng bất kỳ điều kiện biểu thức chính quy nào.

  • {1,3} nó đại diện cho tối thiểu 1 và có thể nhập tối đa 3 chữ số.


hi, làm thế nào tôi có thể đảm bảo giá trị số với một decimalgiữa 0.0để 24.0tôi không thể để cho nó nhập.
biến áp

1
@transformer hãy thử <input type = "number" pattern = "[0-9] + ([\.,] [0-9] +)?" bước = "0,01">
vickisys

11

Một cái gì đó khá đơn giản khi sử dụng 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

chức năng đàn ápNonNumericInput (sự kiện) {

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

hi, làm thế nào tôi có thể đảm bảo giá trị số với một decimalgiữa 0.0để 24.0tôi không thể để cho nó nhập.
biến áp

8

Tôi đã đi đến một giải pháp rất tốt và đơn giản mà không ngăn người dùng chọn văn bản hoặc sao chép dán như các giải pháp khác làm. Phong cách 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

Này, tôi đang sử dụng cái này nhưng điều tôi thực sự tìm kiếm là cho phép anh ta chấm như 1,2 hoặc 3,455 như thế
Vivekh 27/12/13

8

Bạn có thể sử dụng chức năng JavaScript này:

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

Và bạn có thể liên kết nó với hộp văn bản của bạn như thế này:

$(document).ready(function() {
    $('#myTextbox').keydown(maskInput);
});

Tôi sử dụng ở trên trong sản xuất, và nó hoạt động hoàn hảo, và nó là trình duyệt chéo. Hơn nữa, nó không phụ thuộc vào jQuery, vì vậy bạn có thể liên kết nó với hộp văn bản của mình bằng JavaScript nội tuyến:

<input type="text" name="aNumberField" onkeydown="javascript:maskInput()"/>

Điều này thất bại khi ai đó dán văn bản không số trong đầu vào. Bất kỳ ide a làm thế nào chúng ta có thể vượt qua điều này? Không thể bao bọc tâm trí của tôi về điều này.
Kiran Ruth R

7

Tôi nghĩ nó sẽ giúp được tất cả mọi người

  $('input.valid-number').bind('keypress', function(e) { 
return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ;
  })

bạn đang quên về đầu vào bàn phím. Điều này sẽ bao gồm:if(event.which!=8 && event.which!=0 && (event.which<48 || event.which>57) && (event.which<96 || event.which>105)) return;
tomvo

6

Tôi đã viết của tôi dựa trên bài đăng của @ user261922 ở trên, được sửa đổi một chút để bạn có thể chọn tất cả, tab và có thể xử lý nhiều trường "chỉ số" trên cùng một trang.

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

Đây là một giải pháp nhanh chóng mà tôi đã tạo ra một thời gian trước đây. bạn có thể đọc thêm về nó trong bài viết của tôi:

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

Bạn sẽ muốn cho phép tab:

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

Đây là một câu trả lời sử dụng nhà máy jQuery UI Widget. Bạn có thể tùy chỉnh những ký tự được cho phép dễ dàng.

$('input').numberOnly({
    valid: "0123456789+-.$,"
});

Điều đó sẽ cho phép số, ký hiệu số và số tiền đô la.

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

điều này có đảm bảo $ và sau đó + - là ký tự đầu tiên hoặc đầu tiên / giây và sau đó chỉ có 1 dấu thập phân không?
gordon

6

Điều này dường như không thể phá vỡ.

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

Cần đảm bảo rằng bạn có bàn phím số và phím tab cũng hoạt động

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

Tôi muốn giúp một chút, và tôi đã tạo phiên bản của mình, onlyNumberschức năng ...

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

Chỉ cần thêm vào thẻ đầu vào "... input ... id =" price "onkeydown =" return onlyNumbers (event) "..." và bạn đã hoàn tất;)


5

Tôi cũng muốn trả lời :)

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

Đó là ... chỉ là những con số. :) Hầu như nó có thể hoạt động chỉ với 'mờ', nhưng ...


5

Cách đơn giản để kiểm tra xem giá trị nhập là số là:

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

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

5

Chỉ cần áp dụng phương pháp này trong Jquery và bạn có thể xác thực hộp văn bản của mình để chỉ chấp nhận số.

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

Hãy thử giải pháp này tại đây


5

Bạn có thể thử đầu vào số HTML5:

<input type="number" placeholder="enter the number" min="0" max="9">

Phần tử thẻ đầu vào này bây giờ sẽ chỉ nhận giá trị trong khoảng từ 0 đến 9 vì thuộc tính min được đặt thành 0 và thuộc tính max được đặt thành 9.

để biết thêm thông tin về chuyến thăm http://www.w3schools.com/html/html_form_input_types.asp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.