如何在范围菜单中添加“清除”作为选项?

问题描述 投票:0回答:1

我正在使用jQuery daterangepicker插件(http://www.daterangepicker.com/),我想知道是否有人添加了或者可以弄清楚如何添加“范围”菜单中的“清除”选项,选中后,清除输入值?

使用基本文本输入:

<input type="text" name="txtDateRange" id="txtDateRange" value="" />

使用此实例化代码:

    $('#txtDateRange').daterangepicker({
        startDate:  moment().subtract(29, 'days'),
        endDate: moment(),
        ranges: {
           'Today': [moment(), moment()],
           'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
           'Last 7 Days': [moment().subtract(6, 'days'), moment()],
           'Last 30 Days': [moment().subtract(29, 'days'), moment()],
           'This Month': [moment().startOf('month'), moment().endOf('month')],
           'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
           'Clear' : []
        }
    });

产生这个结果:

enter image description here

如何在选择菜单选项时绑定插件正在使用的任何事件,以便在选择“清除”菜单项时,我可以简单地将文本输入值设置为空字符串?

==更新==

请务必在所选答案中使用更新的解决方案。完美的工作!

jquery daterangepicker
1个回答
1
投票

如果startend是无效日期,则可以使用回调(第二个可选参数)函数清除输入,并传递两个对数组中的moment.js无效的值:

$('#txtDateRange').daterangepicker({
  startDate: moment().subtract(29, 'days'),
  endDate: moment(),
  ranges: {
    'Today': [moment(), moment()],
    'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
    'Last 7 Days': [moment().subtract(6, 'days'), moment()],
    'Last 30 Days': [moment().subtract(29, 'days'), moment()],
    'This Month': [moment().startOf('month'), moment().endOf('month')],
    'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
    'Clear': ['', '']
  }
}, function (start, end) {
  if (!start._isValid && !end._isValid) {
    setTimeout(() => {
      $('#txtDateRange').val('').trigger('change');
    })
  }
});
<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />

<input type="text" name="txtDateRange" id="txtDateRange" value="" />

您可以使用任何两个无效值作为日期:[null,null],但不能使用[undefined,undefined],因为undefined时刻默认为moment(),即now,因此._isValid

你可以看到他们的examples page上使用的回调。


更新。更好的用户体验和整体表现(methinks):

$('#txtDateRange').daterangepicker({
  startDate: moment().subtract(29, 'days'),
  endDate: moment(),
  ranges: {
    'Today': [moment(), moment()],
    'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
    'Last 7 Days': [moment().subtract(6, 'days'), moment()],
    'Last 30 Days': [moment().subtract(29, 'days'), moment()],
    'This Month': [moment().startOf('month'), moment().endOf('month')],
    'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],
    'Clear': [,]
  }
}, function (start, end, label) {
  if (label === 'Clear')
    setTimeout(() => {
      this.setEndDate(this.endDate[
        this.endDate.valueOf() - this.startDate.valueOf() > 1440 ? 'subtract' : 'add'
      ](1,'days'));
      $(this.element).val('');
    })  
});
<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />

<input type="text" name="txtDateRange" id="txtDateRange" value="" />
© www.soinside.com 2019 - 2024. All rights reserved.