Setting error message in html with knockout validation

♀尐吖头ヾ 提交于 2020-01-13 20:32:31

问题


I would like to use knockout-validation by only adding validation rules in HTML5, which works great:

http://jsfiddle.net/gt228dgm/1/

I would then like to change the default error messages generated by the browser (like "This field is required." or "Invalid"). This is pretty easily done in javascript code, But I believe this kind of texts should go into the HTML. Is that possible and how? I guess I'm looking for something like:

<input data-bind='value: firstName, validate: { message: "Please enter first name" }' required pattern="^[A-Za-z]{1,255}$"/></label>

回答1:


I have implemented a custom knockout binding that solves my issue:

ko.bindingHandlers.validate = {
    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {

        var valueBinding = allBindings().value;
        var value = valueAccessor();

        if (value) {
            valueBinding.extend(value);
        }
    }
};

The binding then looks like this

<input data-bind='value: firstName, validate: { required: { message: 'Full name is missing' }, pattern: { message: 'Full name should be max. 255 alphanumeric characters' } }' required pattern="^[A-Za-z]{1,255}$"/>

Any other suggestions?




回答2:


I've been playing these days with knockout validation. For your need, you could use validationMessage binding. Here is an example of your code modified, to use this binding: http://jsfiddle.net/elbecita/gt228dgm/4/

Basically, you'd end up having something like:

<span data-bind="validationMessage: firstName, text: 'Your error.'"></span>
<input data-bind='value: firstName, valueUpdate: "input"' required pattern="^[A-Za-z]{1,255}$" />

I've added the valueUpdate binding just to have the validation message shown immediately. And then, in your javascript code, when you define the validation configuration, be sure to turn to false the insertMessages option. If not, you'll see the default message too.

But... I think is easier and cleaner to do this with the knockout extenders in javascript code, having all custom messages centralized in some sort of constants file, instead of having them scattered through the html.

Anyway, dig into the knockout validation bindings, they may help you with your needs. :)




回答3:


Proper way to handle custom validation message in KO is to create a custom validation not binding. Here is an example of simple number validation

ko.validation.rules['integerFormat'] = {
    validator: function (value, options) {
        if (!value) return true;
        var regex = /^\d+$/;
        var matches = regex.test(value);
        if(matches){
            value = parseInt(value,10);
            return typeof value== "number" && isFinite(value) && value%1===0;
        }else{
            return false
        }
    },
    message: app.MyCustomIntegerNotValidMSG
}

app.MyCustomIntegerNotValidMSG is just a variable holding your MSG

You would use this in your ViewModel like this

self.myIntegerToValidate = ko.observable().extend({
    integerFormat:{}
});;


来源:https://stackoverflow.com/questions/25972294/setting-error-message-in-html-with-knockout-validation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!