【问题标题】:KO Validation and bootstrap-datetimepickerKO 验证和 bootstrap-datetimepicker
【发布时间】:2014-01-21 10:33:23
【问题描述】:

我正在尝试验证一个时间字段是否大于另一个时间字段。时间由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();
        });
    })();
};

结果:

Fiddle

【问题讨论】:

    标签: knockout-validation bootstrap-datetimepicker


    【解决方案1】:

    可能有点晚了,但这是我开发的:

    假设您将结束日期作为可观察的,然后使用自定义的“dateBefore”验证

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

    创建自定义验证:

        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();
    

    如果您需要进一步解释,请发表评论

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多