首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅进行输入-在敲除时输入数字类型

仅进行输入-在敲除时输入数字类型
EN

Stack Overflow用户
提问于 2013-06-11 23:51:03
回答 8查看 38.5K关注 0票数 20

我读了很多教程,但我不知道该怎么做,这就是输入

代码语言:javascript
复制
input(type="text",name="price",id="price"data-bind="text: price,valueUpdate:['afterkeydown','propertychange','input']")

这是我的viewModel

代码语言:javascript
复制
price: ko.computed(function()
{
    return parseFloat(this.replace(' ','').replace(/[^0-9\.]+/g,"")) || '';
},this)

但这导致错误:这没有方法替换?如何将价格值传递给计算出的函数?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-06-12 15:46:14

最好创建自定义绑定http://knockoutjs.com/documentation/custom-bindings.html,它只接受允许的字符0-9,。作为数字表示。

将此行放入您的视图中

代码语言:javascript
复制
<input id="text" type="text" data-bind="numeric, value: number">

将这一行放入您的模型中(记住将number绑定为可观察的属性)

代码语言:javascript
复制
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();
                }
            }
        });
    }
};
票数 46
EN

Stack Overflow用户

发布于 2018-02-15 22:07:16

我也遇到过类似的问题。

我还需要确保INTER值只适用于IE9和up (所以type=numberical是不够的),而且由于我们有很多国际客户,我也不能依赖键码,所以我最终得到了以下结果:

代码语言:javascript
复制
//In my js class method (self is this as usual)
self.ensureNumberical = function (data, e) {
    var keyValue = e.key;
    if (keyValue.match(/[0-9]/g)) {
        return true;
    }
    return false;
}

//In my MVC View
data-bind="event: { keypress: ensureNumberical }"
票数 5
EN

Stack Overflow用户

发布于 2014-09-26 06:53:30

另一种方法:我发现Knockout与jQuery-validate结合使用效果很好。您只需确保在尝试使用数值之前验证表单。

假设您有一个表单DOM元素,可以通过以下方式设置验证规则

代码语言:javascript
复制
$(".yourform").validate({
    rules: {
        year: {
            digits: true,
            minlength: 4,
            maxlength: 4
        }
    },
    messages: {
        year: "Please enter four digits (e.g. 2009).",
    }
});

在视图模型中,您可以像往常一样设置双向绑定,例如通过self.year = ko.observable("")。现在,确保在进一步处理self.year()之前调用$(".yourform").valid()。在我的例子中,我做的是var year = parseInt(self.year(), 10)。在表单验证之后,预计这将始终产生有意义的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17048468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档