淘汰验证 - 值更改后,isValid()始终为true

时间:2013-12-09 15:10:34

标签: javascript knockout.js knockout-validation

我有以下情况:

function ViewModel(){

    var self = this;

    self.newQty = ko.observable().extend({        
        pattern: {
            message: "Wrong!",
            params: new RegExp("^[1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2}$")
        }
    });

    self.newQty.subscribe(function() {
        if(self.newQty.isValid())
            doStuff();
    })
}

newQty字段绑定到input元素。

如果我在input框中输入“123”,isValid()评估为true,如果我在input框中输入“asd”{{1}评估为isValid()

当我将“123”更改为“123a”时,问题就会出现。 false仍然评估为真。

我的问题是:有没有办法手动强制重新评估字段isValid()?我发现了一些帖子超级调用newQty但我在使用时遇到valueHasMutated()错误。

我使用Knockout 2.3.0和最新版本的Knockout验证插件。

谢谢!

1 个答案:

答案 0 :(得分:1)

问题在于你没有逃避交替(|)。如果你添加括号,它应该工作:

params: new RegExp("^([1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2})$")

您可以在浏览器控制台中测试它:

'1234a'.test(/^[1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2}$/) //returns true
'1234a'.test(/^([1-9][0-9]*(\\,\\d{1,2})?|0+\\,\\d{1,2})$/) //returns false