使用KnockoutJS验证插入常规验证警报

时间:2014-01-02 12:50:16

标签: validation knockout.js

我正在寻找一种最有效的方式来插入常规验证提醒“请检查您的提交”,使其位于字段集上方,而不是在下面编码的警告弹出窗口中。

http://jsfiddle.net/Nz38D/3/

HTML:

<script id="customMessageTemplate" type="text/html">
    <em class="customMessage" data-bind='validationMessage: field'></em>
</script>

<fieldset>
    <legend>Details</legend>
    <label>First name:
        <input data-bind='value: firstName' />
    </label>
    <label>Last name:
        <input data-bind='value: lastName' />
    </label>
    <div data-bind='validationOptions: { messageTemplate: "customMessageTemplate" }'>
        <label>Email:
            <input data-bind='value: emailAddress' required pattern="@" />
        </label>
</fieldset>
<br>
<button type="button" data-bind='click: submit'>Submit</button>
<br>
<br> <span data-bind='text: errors().length'></span> errors

JS:

ko.validation.rules.pattern.message = 'Invalid.';

ko.validation.configure({
    decorateElement: true,
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: true,
    messageTemplate: null
});

var viewModel =  function() {
    this.firstName = ko.observable().extend({
        minLength: 2,
        maxLength: 10
    });
    this.lastName = ko.observable().extend({
        required: true
    });
    this.emailAddress = ko.observable().extend({ // custom message
        required: {
            message: 'Enter your email address.'
        }
    });
    this.submit = function () {
        if (this.errors().length == 0) {
            alert('Thank you.');
        } else {
            alert('Please check your submission.');
            this.errors.showAllMessages();
        }
    };
    this.errors = ko.validation.group(this);
};

ko.applyBindings(new viewModel());

1 个答案:

答案 0 :(得分:0)

我插入了一个虚拟元素来保存验证摘要消息并将其显示绑定到click函数中的observable:http://jsfiddle.net/sx42q/2/

HTML:

<!-- ko if: displayAlert -->
<p class="customMessage" data-bind="text: validationSummary"></p> <br />
<!-- /ko -->

JS:

    this.validationSummary = ko.observable("Complete missing fields below:");
    this.displayAlert = ko.observable(false);

    this.submit = function () {
        if (this.errors().length == 0) {
            alert('Thank you.');
        } else {
            this.displayAlert(true);
            this.errors.showAllMessages();
        }