簡體   English   中英

Javascript:數字輸入-防止多個小數點

[英]Javascript : Number input - prevent more than one decimal point

我正在尋找在淘汰賽上輸入數字的唯一類型 可接受的答案很好用,但是如何防止輸入一個以上的小數點(如4.4.4)(或如何防止第二個小數點)?

代碼如下:

<input id="text" type="text" data-bind="numeric, value: number">

ko.bindingHandlers.numeric = {
init: function (element, valueAccessor) {
    $(element).on("keydown", function (event) {
        // Allow: backspace, delete, tab, escape, and enter
        if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
            // Allow: Ctrl+A
            (event.keyCode == 65 && event.ctrlKey === true) ||
            // Allow: . ,
            (event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 110) ||
            // Allow: home, end, left, right
            (event.keyCode >= 35 && event.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                event.preventDefault();
            }
        }
    });
}
};

自定義綁定對我來說並不好。 我建議只使用Knockout Validation ,它在我的工作流程中被證明是一個很棒的插件,具有剔除功能。 語法很簡單: ko.observable(...).extend({ number: true }) 您還可以添加最小/最大驗證: .extend({ number: true, min: 0, max: 100 }) // percentage ,該插件允許將CSS類添加到無效元素中。

請參見下面的示例。 它可以滿足您的需求。

 function viewModel() { this.number = ko.observable(0).extend({ number: true }); } ko.applyBindings(new viewModel(), document.body); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.js"></script> <input data-bind="textinput: number" /> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM