正如@Ahmad Zahabi 提到的,没有内置选项可以让日期范围选择器始终打开。但是,通过对其代码进行一些修改,这是可能的。他的解决方案对我不起作用,因为它会弄乱 document.click 页面上其他菜单的调用。以下是 daterangepicker.js 文件中需要更新的几行:
outsideClick 部分 - 注释掉 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();
}
},
然后,初始化picker后,触发对应的输入框点击:
$("#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.
});
最后,值得一提的是,上述变化将
- 始终保持日历打开
- 如果使用“单击日历关闭时的日期范围输入字段”解决方案,则不会导致日历闪烁
- 允许使用日期范围,并将在单击范围时自动更新日历
- 在“取消”点击时将日期重置为定义的默认日期,而不关闭日历
就是这样。希望它可以帮助那里的人