knockout.js - 两个带 knockout 的日期选择器,一个更新另一个

标签 knockout.js jquery-ui-datepicker

我附加了带有 knockout 自定义绑定(bind)处理程序的 jQuery datepicker,并且我想在更新第一个字段时将 minDate 设置为第二天之后(以防其他日期未设置为以后的日期)。

<label>Check-in:</label>
<input type="date" id="checkIn" data-bind="datepicker: checkIn, datepickerOptions: {
    minDate: 0,
    dateFormat: 'dd/mm/yy',
    firstDay: 1
    }" />
<br/>
<br/>

<label>Check-out:</label>
<input type="date" id="checkOut" data-bind="datepicker: checkOut, datepickerOptions: {
    minDate: 0,
    dateFormat: 'dd/mm/yy',
    firstDay: 1
    }" />

我已设置 fiddle for that

例如 如果 checkOut 日期选择 28/11/2012 而您 checkIn 选择 25/11/2012 则无需更改 checkOut 日期,只需将 checkOut 的 minDate 设置为 26/11/2012。

但如果您选择 29/11/2012 进行 checkIn,则 checkOut 需要更新为 30/11/2012

最佳答案

一种方法是订阅第一个日期可观察属性并使用它来设置第二个:

self.checkIn.subscribe(function(newValue) {
    $("#checkOut").datepicker("option", "minDate", self.checkIn());
});

here

当然,这不是最优雅的解决方案,因为它需要知道 View 的哪一部分与其他属性相关。更好的解决方案可能是创建另一个自定义绑定(bind)。

类似这样的:

ko.bindingHandlers.minDate = {
    update: function(element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
        current = $(element).datepicker("option", "minDate", value);
    }        
}

这样绑定(bind):

<input type="date" id="checkOut" data-bind="{datepicker: checkOut, datepickerOptions: {
minDate: 0,
dateFormat: 'dd/mm/yy',
firstDay: 1
},
minDate: checkIn}" />

here .

关于knockout.js - 两个带 knockout 的日期选择器,一个更新另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496605/

相关文章:

knockout.js - ko.validation with validatedObservable 给我奇怪的结果

javascript - 具有更新功能的 knockout 自定义选择 Binder

knockout.js - Knockoutjs - 对大型 observablearray 进行排序

jquery - 如何获取 Html.Editorfor 的日期选择器

javascript - knockout 绑定(bind)不起作用,如何修复?

javascript - 过滤器与 knockout.js 绑定(bind)的问题

javascript - 日期时间日历 : select date range in a single input field

yii - 如何使用jquery-datepicker作为日期范围

javascript - 在 jQuery UI 日期选择器中使用 minDate/maxDate 时如何使上一个/下一个按钮可见?

jquery UI 日期选择器 : calculate minDate x years from today