Как определить окончательное событие ValueChange в Kendo Angular DatePicker

Мне нужно установить минимальную и максимальную даты для Kendo Angular DatePicker. Это довольно просто, используя [(max)]="maxDate" and [(min)]="minDate" и это работает при использовании мыши и щелчка по DatePicker.

Проблема заключается в том, что при использовании ввода с клавиатуры пользователь может выбирать даты вне минимальных и максимальных дат. У меня есть событие valueChange, но оно срабатывает при каждом нажатии клавиши. Я не могу определить, когда пользователь заканчивает ввод всей даты, а затем просто устанавливает дату на минимум или максимум по мере необходимости. Я мог бы установить событие onFocus для следующего элемента управления, но это было бы глупо.

Это фрагмент HTML-кода:

  <kendo-datepicker 
    id="dpFirstPaymentDate" 
    (valueChange)="onFirstPaymentDateChange($event)" 
    [(value)]="firstPaymentDate" 
    [(max)]="maxDate" 
    [(min)]="minDate" 
    [(focusedDate)]="firstPaymentDate" 
    [rangeValidation] = "true" 
    title="First Payment Date">
  </kendo-datepicker>

Угловой код такой:

 protected onFirstPaymentDateChange(/*event: EventEmitter*/ value: Date): void {

        if (value > this.maxDate) {
          // This does not appear to be working
          value = new Date(this.maxDate);
          this.firstPaymentDate = new Date(this.maxDate);
        }
        else if (value < this.minDate) {
          value = new Date(this.minDate);
          this.firstPaymentDate = new Date(this.minDate);
        }

        this.maturityDate = new Date(value);
        this.maturityDate.setMonth(value.getMonth() + this.term);


    }

Полный пример плунжера здесь: Пример плунжера

1 ответ

Решение

Хорошо, так как мой комментарий на самом деле точечный, так что вместо того, чтобы использовать событие onchange, мы должны использовать событие on blur

<kendo-datepicker 
    id="dpFirstPaymentDate" 
    (blur)="onFirstPaymentDateChange($event)" 
    [(value)]="firstPaymentDate" 
    [(max)]="maxDate" 
    [(min)]="minDate" 
    [(focusedDate)]="firstPaymentDate" 
    [rangeValidation] = "true" 
    title="First Payment Date">
</kendo-datepicker>

и просто немного изменить функцию onFirstPaymentDateChange, так как мы не получаем значение даты, может просто получить его с this.firstPaymentDate и мы можем продолжать устанавливать логику (максимальное значение). Вот рабочий пример в PLNKR

Другие вопросы по тегам