标签: knockout-validation

使用正则表达式验证电话号码的敲除验证

我试图使用Knockout-Validation为我的一个observable添加一个简单的正则表达式验证.

我有以下内容:

self.ContactPhone = ko.observable().extend({
            required: true,
            pattern: {
                message: 'Invalid phone number.',
                params: '^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$'
            }
        });
Run Code Online (Sandbox Code Playgroud)

但是,无论我输入什么,它都会返回"无效的电话号码"消息.我需要以某种方式格式化表达式吗?我使用纯JavaScript测试它,它工作正常.

knockout.js knockout-validation

6
推荐指数
2
解决办法
2万
查看次数

检查扩展是否应用于observable

我想单元测试我的函数,它基本上从一组参数(TypeScript代码)构建一个observable数组:

private BuildObservables(parameters: Parameter[]) {
        var observables = {};

        for (var parameterName in parameters) {

            var p = parameters[parameterName];

            // Build observable
            observables[parameterName] = ko.observable(p.Value);

            // Attach validation
            if (p.IsRequired) {
                observables[parameterName].extend({ required: true });
            }
        }
        return observables;
    }
Run Code Online (Sandbox Code Playgroud)

我的测试看起来像这样:

var parameters = [];

// new Parameter(int value, bool isRequired)
parameters["Param1"] = new Parameter("123", true);
parameters["Param2"] = new Parameter("456", false);

var viewModel = BuildObservables(parameters);

ok(viewModel["Param1"] != null);
ok(viewModel["Param2"] != null);
Run Code Online (Sandbox Code Playgroud)

如果第一个参数isRequired设置为true,如何检查是否应用了扩展(验证)(BuildObservables中的"附加验证"部分)?

编辑:

在另一个功能我附加订阅者,我不知道如何测试他们是否正确附加.

knockout.js knockout-validation knockout-extensions

6
推荐指数
1
解决办法
1139
查看次数

使用可观察参数进行Knockout Custom Validation

我有一种情况需要验证视图模型中字段的最大数量.但是,最大数量必须是可变的,并根据在此模型外部选择的UI项目计算.我试图在我的自定义验证器中包含observable作为参数,但是当值发生更改时,它似乎不会更新.

我有一种感觉,一旦第一次执行验证代码,它就会保留参数.

没有使用Knockout的列表的HTML

<select id="ContentsReplacementAmount">
    <option value="25000">£25000</option>
    <option value="50000">£50000</option>
    <option value="75000">£75000</option>
</select>
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码的笨拙版本.

var SpecifiedValuablesViewModel = function (maxSpecifiedItemAmount) {
    var self = this;

    self.maxSpecifiedItemAmount = ko.observable(maxSpecifiedItemAmount);

    self.amountToAdd = ko.observable().extend({
        validation: {
            validator: function (val, max) {
                return val <= max;
            },
            message: 'The amount must be a maximum of £{0}',
            params: self.maxSpecifiedItemAmount()
        }
    });
};

var specifiedValuablesViewModel = new SpecifiedValuablesViewModel($('#ContentsReplacementAmount').val());
ko.applyBindings(ko.validatedObservable(specifiedValuablesViewModel), document.getElementById('SpecifiedValuables'));
Run Code Online (Sandbox Code Playgroud)

maxSpecifiedAmount之外的事件

$('#ContentsReplacementAmount').on('change', function () {
    specifiedValuablesViewModel.maxSpecifiedItemAmount(parseInt($(this).val()));
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎样才能做到这一点?

javascript validation knockout.js knockout-validation

6
推荐指数
1
解决办法
8915
查看次数

敲除验证两个相互依赖的字段

考虑以下代码 -

var MyObjectModel = function(myObject){
var self = this;
self.myNumber1 = ko.observable(myObject.number1).trimmed();
self.myNumber2 = ko.observable(myObject.number2).trimmed();
Run Code Online (Sandbox Code Playgroud)

我想扩展myNumber1和myNumber2,添加敲除验证,如果两者都为空则抛出错误,如果有值,则保持正常.

知道如何实现这个目标吗?

javascript knockout.js knockout-validation

5
推荐指数
1
解决办法
3516
查看次数

将两个字段与敲除验证进行比较

我有一个表单的viewmodel,我正在尝试使用knockout-validation添加验证.

fromDate: ko.observable(
            moment().subtract('days', 1).startOf('day').format(dateFormat)
          ),
toDate: ko.observable(
            moment().startOf('day').format(dateFormat)
        ),
Run Code Online (Sandbox Code Playgroud)

我需要确保起始日期小于到目前为止.我似乎无法获得任何形式的自定义验证器来获取对第二个observable的引用.我需要的东西是:

toDate: ko.observable(moment().startOf('day').format(dateFormat)).extend({
          validation: {
            validator: function (val, someOtherVal) {
                return moment(val) >= moment(someOtherVal);
            },
            message: 'Must be greater or equal to From Date',
            params: viewModel.fromDate()
          }
        }),
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

更新

我确定我已经尝试过这个,但是将扩展方法移动到onload函数是有效的.

$(function () {
    ko.validation.configure({ decorateElement: true });

    viewModel.toDate.extend({
    validation: {
            validator: function (val, someOtherVal) {
                return moment(val) >= moment(viewModel.fromDate());
            },
            message: 'To date must be greater than from date',
        }
    });

    ko.applyBindings(viewModel);
});
Run Code Online (Sandbox Code Playgroud)

knockout.js knockout-validation

5
推荐指数
2
解决办法
1万
查看次数

KnockoutJS验证:修改单选按钮验证消息显示位置

我正在使用Knockout Validation,当我用它来验证单选按钮组时,每个单选按钮旁边都会显示验证错误消息.我希望它只显示在一个位置.据推测,我将不得不"关闭"单选按钮组的验证消息的自动显示,然后在特定位置手动显示验证消息.但是......我还没有找到办法做到这一点.

这是一个演示我正在谈论的内容的小提琴:http: //jsfiddle.net/jbeall/tD4nU/2/

我希望其他输入类型(例如,文本输入)保留自动向右显示消息的行为.

我怎么设置它?

谢谢!

ps对于后代,jsfiddle代码如下:

// HTML

<div>
    <div>First name: <input type='text' data-bind='value: firstname'/></div>
    <div>Last name: <input type='text' data-bind='value: lastname'/></div>
</div>
<div>
    Question Type:
    <div>
        <label>
            <input type='radio' value='sales' name='questionType' data-bind="checked: questionType"/>
            Sales
        </label>
    </div>
    <div>
        <label>
            <input type='radio' value='support' name='questionType' data-bind="checked: questionType"/>
            Support
        </label>
    </div>
    <div>
        <label>
            <input type='radio' value='other' name='questionType' data-bind="checked: questionType"/>
            Other
        </label>
    </div>
</div>

<div>
    <input type='button' data-bind='click: triggerGroupValidation' value='Trigger validation via group() function'/>
</div>

<div data-bind='text: ko.toJSON(questionType)'></div>


<div>
    Click button …
Run Code Online (Sandbox Code Playgroud)

knockout.js knockout-validation

5
推荐指数
1
解决办法
2320
查看次数

敲除验证不显示选择倍数的错误消息

我设置了一个带有敲除验证插件的页面,用于验证用户输入.我有两个因素:一个是正规的select,另一种是selectmultiple集.我们的想法是使两个元素都是必需的.

验证调用正在触发,但问题是选择倍的错误消息未显示.

这是我的js代码:

  ko.validation.init();

    function isNotUndefined(val) {
        return (typeof val != "undefined");
    }

    function isArrayNotEmpty(val) {
        return (val.length > 0);
    }

    var viewModel = function () {
        var self = this;

        self.memberType = ko.observable().extend({
            validation: {validator: isNotUndefined, message:'Please select gender'}
        });
        self.seekingTypes = ko.observableArray().extend({
            validation: {validator: isArrayNotEmpty, message:'At least one option is required'}
        });
        self.memberTypeSource = [
            { id: 1, text: 'Man' },
            { id: 2, text: 'Woman' }
        ];
        self.errors = ko.validation.group(self);
        self.doValidation …
Run Code Online (Sandbox Code Playgroud)

javascript knockout.js knockout-validation

5
推荐指数
1
解决办法
1474
查看次数

下拉列表中的Knockout Validation始终显示错误消息

将值绑定到下拉列表并使用敲除验证时,即使我的敲除验证设置说明,也会始终显示错误消息messagesOnModified: true.

HTML

<input type="text" data-bind="value: Name" />
<br />
<select data-bind="value: State">
    <option value="">Select a state...</option>
    <option value="NY">New York</option>
    <option value="NJ">New Jersey</option>
</select>
Run Code Online (Sandbox Code Playgroud)

JS

var ViewModel = function () {
     var self = this;

    self.Name = ko.observable().extend({
        required: { message: "You must enter a name." }
    });
    self.State = ko.observable().extend({
        required: { message: "You must select a state." }
    });

    self.Errors = ko.validation.group(self);
}

ko.validation.configure({
    messagesOnModified: true,
    insertMessages: true
});

ko.applyBindings(new ViewModel(), document.body);
Run Code Online (Sandbox Code Playgroud)

并且jsfiddle显示文本框和下拉列表之间的区别:http://jsfiddle.net/f7v4m/ …

javascript knockout-2.0 knockout.js knockout-validation

5
推荐指数
1
解决办法
7248
查看次数

KnockoutJS实时验证本地化

我正在尝试本地化KnockoutJS验证插件,但我需要能够在运行中切换语言.这个插件有一个问题,但它已经超过2年了(并且仍然开放).

我只是想做的是在加载所有内容后切换验证消息的语言.这是一个例子(可以在小提琴上看到:http://jsfiddle.net/Kikketer/S6j2q/)

<input data-bind='value: phone' />
<div data-bind="text: phone"></div>
<button type='button' data-bind="click: v">Validate</button>
<button type='button' data-bind='click: switchLanguage'>Switch Language</button>
Run Code Online (Sandbox Code Playgroud)

使用以下JS:

ko.validation.configure({
    registerExtenders: true
});
// If I localize right away, things work
ko.validation.localize({required: '**Required'});

var InterviewTwo = function() {
    // Standard "required" validator
    this.phone = ko.observable().extend({required: true});

    // Group all of the validators
    this.errors = ko.validation.group(this);

    // Validation function
    this.v = function() {
        this.errors.showAllMessages();
    };

    // Switching languages after or before the validation …
Run Code Online (Sandbox Code Playgroud)

knockout.js knockout-validation

5
推荐指数
1
解决办法
854
查看次数

淘汰验证 - 空白时不验证输入+提交时评估

检查这个小提琴:

http://jsfiddle.net/bhzrw01s/

我试图做两件事:

第一:当字段为空时不要验证.我知道有一个onlyif选项..但是有更容易的东西吗?

第二:当我点击提交时我需要运行验证的东西(如果你测试我的小提琴,错误消息会弹出,但不会应用errorClass css)

感谢:D

CSS:

input.error {
    color: red;
    border-color: red;    
}
Run Code Online (Sandbox Code Playgroud)

JS:

ko.validation.configure({
    insertMessages: false,
    decorateElement: true,
    errorElementClass: 'error',
    messagesOnModified: false    
});

function SignInViewModel() {

    var self = this;
    self.userName = ko.observable().extend({
        required: true
    });
    self.password = ko.observable().extend({
        required: true
    });

    self.errors = ko.validation.group(self);
    self.login = function (e) {

        if (self.errors().length == 0) {
            alert('No errors');
        } else {
            this.errors().forEach(function(data) {
               alert(data);
        });
            //self.errors.showAllMessages(true);
        }
    }

}
$(function () {
    ko.applyBindings(new SignInViewModel());
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<form>
<fieldset> …
Run Code Online (Sandbox Code Playgroud)

knockout.js knockout-validation

5
推荐指数
1
解决办法
8473
查看次数