3

我正在尝试验证一个时间字段是否大于另一个时间字段。时间由bootstrap-datetimepicker输入,并通过 KO Validation 进行验证。

我的问题是验证似乎发生在文本框的自动更正之前。

应用自动更正后如何进行验证?

代码:

var vm = function () {
    var self = this;
    self.startTime = ko.observable().extend({ required: true });
    self.endTime = ko.observable()
    .extend({
        validation: {
            validator: function (val) {
                if (self.startTime() === '' || val === '') {
                    return true;
                }
                return new Date(val) > new Date(self.startTime());
            },
            message: 'Event must finish after it started'
        }
    });
    (function () {
        $('#event-start-time').datetimepicker({
            pickDate: false
        });
        $('#event-end-time').datetimepicker({
            pickDate: false
        });
        $('#event-end-time').on("change.dp", function (e) {
            //I've tried with and without this
            //self.endTime.valueHasMutated();
        });
    })();
};

结果:

在此处输入图像描述

小提琴

4

1 回答 1

0

may be a little late but this is what I've developed:

Say you have your end date as an observable, then use the custom 'dateBefore' validation

    this.endDate = ko.observable(new Date().addHours(3).toGMTString()).extend({
        required: true,
        dateBefore: self.startDate()
    });

Creating the custom validation:

    ko.validation.rules['dateBefore'] = {
        validator: function (val, otherVal) {
            var d1 = new Date(val),
                d2 = new Date(otherVal);
            return d1 > d2;
        },
        message: 'The end date must be before the start date'
    };
    ko.validation.registerExtenders();

Comment if you need further explanation

于 2015-03-03T20:56:17.407 回答