【问题标题】:settings daterange with pikaday datepicker使用 pikaday 日期选择器设置日期范围
【发布时间】:2017-07-09 09:01:05
【问题描述】:

我有一个预订表格,我只需要两个输入#checkin 和 #checkout,这就是为什么我使用 datepicker 和 daterange 一切正常几乎一件事是我如何在两个日期之间只选择 15 天?

顺便说一句,我使用的是Pikaday datepicker

$(document).ready(function() {

  $('.flexdatalist').flexdatalist({
    minLength: 0,
    searchContain: true,
  }).on('select:flexdatalist', function() {
    $('#checkin').trigger("click");
  });

  assignPicker = function(id, whenClosed) {
    if (typeof whenClosed !== 'function') {
      whenClosed = null;
    }

    return new Pikaday({
      numberOfMonths: 2,
      field: document.getElementById(id),
      format: "DD.MM.YYYY",
      minDate: new Date(),
      firstDay: 1,
      maxDate: new Date(2020, 12, 31),
      onSelect: function() {
        e = this.getDate();
      },
      onSelect: whenClosed
    });
  }

  assignPicker('checkin', function() {
    $('#checkout').trigger("click");
  });
  assignPicker('checkout', function() {
    $('#select').trigger("click");
  });

});
 body {
            padding: 30px;
        }
        input,
        select {
            width: 100%;
            padding: 10px;
            border: 1px solid #ccc;
        }
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pikaday/1.5.1/css/pikaday.min.css" />
  <link rel="stylesheet" href="https://cdn.anitur.com.tr/example/flexdatalist/flexdatalist.css" />




  <div class="container">


    <div class="row">
      <div class="col-lg-3 col-md-3 col-sm-3">
        <input type="text" name="" class='flexdatalist' data-min-length='1' list='languages' name='language' />
        <datalist id="languages">
          <option value="PHP">PHP</option>
          <option value="JavaScript">JavaScript</option>
          <option value="Cobol">Cobol</option>
          <option value="C#">C#</option>
          <option value="C++">C++</option>
          <option value="Java">Java</option>
          <option value="Pascal">Pascal</option>
          <option value="FORTRAN">FORTRAN</option>
          <option value="Lisp">Lisp</option>
          <option value="Swift">Swift</option>
          <option value="ActionScript">ActionScript</option>
        </datalist>
      </div>
      <div class="col-lg-3 col-md-3 col-sm-3">
          <input type="text" id="checkin" />
      </div>
      <div class="col-lg-3 col-md-3 col-sm-3">

          <input type="text"  id="checkout" />
      </div>
      <div class="col-lg-3 col-md-3 col-sm-3">

<form action="" method="get">
        <select name="select" id="select">
          <option value="0">Choose</option>
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
          <option value="6">6</option>
          <option value="7">7</option>
        </select>
      </form>
      </div>
    </div>


  </div>



  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
  
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pikaday/1.5.1/pikaday.min.js"></script>

  <script src="https://cdn.anitur.com.tr/example/flexdatalist/flexdatalist.js"></script>

if you can check it out on codepen instead of stackoverflow snippet

【问题讨论】:

    标签: javascript jquery date datepicker date-range


    【解决方案1】:

    您可以保存对结帐选择器的引用,然后将函数绑定到签入选择器的onSelect 方法并相应地调整结帐日期选择器。您可以(并且可能应该)加载 Moment.js 以使日期计算更容易。 Pikaday 的 format 属性(您正在使用)没有它甚至都无法工作。

    $(document).ready(function() {
    
      $('.flexdatalist').flexdatalist({
        minLength: 0,
        searchContain: true,
      }).on('select:flexdatalist', function() {
        $('#checkin').trigger("click");
      });
    
      assignPicker = function(id, whenClosed) {
        if (typeof whenClosed !== 'function') {
          whenClosed = null;
        }
    
        return new Pikaday({
          numberOfMonths: 2,
          field: document.getElementById(id),
          format: "DD.MM.YYYY",
          minDate: new Date(),
          firstDay: 1,
          maxDate: new Date(2020, 12, 31),
          onSelect: whenClosed
        });
      }
    
      var checkoutPicker = assignPicker('checkout', function() {
        $('#select').trigger("click");
      });
    
      var checkinPicker = assignPicker('checkin', function() {
        var maxDate = this.getMoment().add(15, 'days');
        checkoutPicker.setMaxDate(maxDate.toDate());
        checkoutPicker.setMinDate(this.getDate()); // min date of checkout = checkin
        checkoutPicker.setDate(null);
        $('#checkout').trigger("click"); // trigger checkout picker
      });
    
    });
    

    http://codepen.io/anon/pen/apgGpN

    【讨论】:

    • 谢谢。签入后它没有关注结帐表格
    • 我猜是getMoment的问题,我不想getmoment.js没有moment.js有什么办法吗?
    • 只需在签入选择器回调函数中添加$('#checkout').trigger("click");。当然,您不必使用 Moment.js,例如参见 here。但是在 JS 中处理日期时需要考虑很多事情(夏令时、闰年、时区等),而 Moment 会处理所有事情。它让生活变得更轻松,所以我建议你使用它。
    • 谢谢.. 我应该在哪里输入$('#checkout').trigger("click"); 代码?我怎么写#checkin的回调?顺便谢谢
    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多