Javascript:数字输入-防止超过一个小数点

Javascript:数字输入-防止超过一个小数点,javascript,knockout.js,Javascript,Knockout.js,我在看。 接受的答案很好,但如何防止输入一个以上的小数点(如4.4.4),或者如何防止输入第二个小数点 代码如下所示: <input id="text" type="text" data-bind="numeric, value: number"> ko.bindingHandlers.numeric={ init:函数(元素、值访问器){ $(元素).on(“向下键”),函数(事件){ //允许:退格、删除、制表符、转义和回车 如果(event.keyCode==46 |

我在看。 接受的答案很好,但如何防止输入一个以上的小数点(如4.4.4),或者如何防止输入第二个小数点

代码如下所示:

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


ko.bindingHandlers.numeric={
init:函数(元素、值访问器){
$(元素).on(“向下键”),函数(事件){
//允许:退格、删除、制表符、转义和回车
如果(event.keyCode==46 | | | event.keyCode==8 | | event.keyCode==9 | | event.keyCode==27 | | event.keyCode==13||
//允许:Ctrl+A
(event.keyCode==65&&event.ctrlKey==true)||
//允许:,
(event.keyCode==188 | | event.keyCode==190 | | event.keyCode==110)||
//允许:起始、结束、左、右

(event.keyCode>=35&&event.keyCode自定义绑定对我来说不太合适。我建议只使用它,这在我的工作流程中证明是一个很好的带有knockout的插件。语法很简单:
ko.observable(…).extend({number:true})
。您还可以添加min/max验证:
.extend({number:true,min:0,max:100})//百分比
,插件允许向无效元素添加css类

见下面的例子。它正是你想要的

函数viewModel(){
this.number=ko.observable(0).extend({number:true});
}
ko.applyBindings(新的viewModel(),document.body);


这将有帮助:嗨,Rajesh,在公认的答案中,我不能输入带小数点的数字。你可以尝试以下方法:。注意,这不是完整的解决方案。如果你能制定一个合适的模式,你可以使用此解决方案。否则,你甚至可以尝试我的问题中的方法。它们工作正常,只是会增加另一轮处理。是吗您不能使用?@user3297291数字扩展器是有用的,但它不能防止在输入中放置不需要的值…@SVSchmidt验证是好的,但有没有办法防止字母、特殊字符(除了“.”之外)还有像5.4.3这样的东西被输入到输入中吗?@simba Meek:ko.validation有一些选项,但我担心你实际上不能限制输入的字符。但是这是必要的吗?我总是认为,让用户输入他想要的任何东西,只要你告诉他他很愚蠢。ko.validatiln让你检查一个可观察的东西是否有效(
.isValid()
),您可能会做出正确的反应。
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();
            }
        }
    });
}
};