【问题标题】:Javascript : Number input - prevent more than one decimal pointJavascript:数字输入 - 防止多于一位小数
【发布时间】:2017-05-17 10:46:43
【问题描述】:

我在看make an input only-numeric type on knockout。 接受的答案工作正常,但如何防止输入多于一个小数点(如 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();
            }
        }
    });
}
};

【问题讨论】:

  • 嗨 Rajesh,在接受的答案中我不能输入带小数点的数字
  • 你可以试试这样的:Fiddle。请注意,这不是完整的解决方案。如果您可以制定适当的模式,则可以使用此解决方案。否则,您甚至可以尝试我的问题中的方法。他们工作正常,只是他们会添加另一轮处理。
  • 您是否有不能使用numeric extender的原因?
  • @user3297291 数字扩展器很有用,但它不能防止在输入中放置不需要的值...

标签: javascript knockout.js


【解决方案1】:

自定义绑定不适合我。我建议只使用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" />

【讨论】:

  • @SVSchmidt 验证很好,但有没有办法防止在输入中输入字母、特殊字符(“.”除外)和 5.4.3 之类的内容?
  • @simba Meek: ko.validation 有一些选项github.com/Knockout-Contrib/Knockout-Validation/wiki/… 但恐怕你实际上不能限制输入的字符。但这有必要吗?我一直认为,让用户输入他想要的任何内容,只要你告诉他他很愚蠢。 ko.validatiln 可让您检查 observable 是否有效 (.isValid ()),并且您可以做出正确的反应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 2017-07-01
  • 2016-12-18
相关资源
最近更新 更多