Как упомянул @Ahmad Zahabi, нет встроенной опции, позволяющей постоянно открывать средство выбора диапазона дат. Однако, немного поработав с кодом, это возможно. Его решение не сработало для меня, так как оно испортило бы вызов document.click для других меню на странице. Вот несколько строк, которые необходимо обновить в файле daterangepicker.js:
Раздел externalClick — закомментировать this.hide(); строку следующим образом:
outsideClick: function(e) {
var target = $(e.target);
// if the page is clicked anywhere except within the daterangerpicker/button
// itself then call this.hide()
if (
// ie modal dialog fix
e.type == "focusin" ||
target.closest(this.element).length ||
target.closest(this.container).length ||
target.closest('.calendar-table').length
) return;
//this.hide();
this.element.trigger('outsideClick.daterangepicker', this);
},
Раздел clickCancel - закомментировать this.hide(); строку следующим образом:
clickCancel: function(e) {
this.startDate = this.oldStartDate;
this.endDate = this.oldEndDate;
//this.hide();
this.element.trigger('cancel.daterangepicker', this);
},
Раздел ClickRange — закомментируйте this.clickApply(); и вместо этого добавьте this.updateCalendars() следующим образом:
clickRange: function(e) {
var label = e.target.getAttribute('data-range-key');
this.chosenLabel = label;
if (label == this.locale.customRangeLabel) {
this.showCalendars();
} else {
var dates = this.ranges[label];
this.startDate = dates[0];
this.endDate = dates[1];
if (!this.timePicker) {
this.startDate.startOf('day');
this.endDate.endOf('day');
}
if (!this.alwaysShowCalendars)
this.hideCalendars();
//this.clickApply();
this.updateCalendars();
}
},
Затем, после инициализации средства выбора, вызовите щелчок по соответствующему полю ввода:
$("#daterange").click();
Назначьте событие щелчка, чтобы сделать то, что вы хотели бы сделать после нажатия кнопки «Применить»:
$([div housing your calendar]).find(".drp-buttons .applyBtn").click(function(){
//my code picks the value from the calendar input field and passes it via the URL to reload the page. It could execute some AJAX call or whatever you desire it to do.
});
И, наконец, стоит отметить, что вышеуказанные изменения будут
- всегда держать календарь открытым
- не будет вызывать мерцание календаря, как если бы было использовано решение «щелкнуть поле ввода диапазона дат при закрытии календаря»
- разрешить использование диапазонов дат и автоматически обновлять календарь при нажатии диапазона
- сбросить дату до определенной даты по умолчанию при нажатии кнопки «Отмена», не закрывая календарь
Ничего не поделаешь. Надеюсь, это поможет кому-то там
person
SimonDau
schedule
23.07.2020