2017-02-20 11 views
0

У меня есть форма для бронирования, и мне нужно всего лишь два ввода #checkin и #checkout, и именно поэтому я использовал datepicker с daterange, все идет нормально, почти одно, как я могу выбрать всего 15 дней между две даты?Настройки daterange с pikaday datepicker

, кстати, я использую 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

ответ

1

Вы можете сохранить ссылку на селектор кассы, а затем привязать функцию к onSelect методе Picker CheckIN в и соответствующим образом настройте контрольную дату. Вы могли (и, вероятно, должны) загрузить Moment.js, чтобы сделать расчеты по дате намного проще. Свойство 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

+0

thanks.After CheckIN это не фокусирование форма оформления заказа –

+0

я думаю, проблема это о getMoment, и я не хочу getmoment.js есть ли способ обойтись без moment.js? –

+1

Просто добавьте '$ ('# checkout'). Trigger (" click ");' в функцию обратного вызова pickin picker. И конечно, вам не нужно использовать Moment.js, например [здесь] (http://stackoverflow.com/questions/563406/add-days-to-javascript-date). Но есть много вещей, которые нужно учитывать при работе с датами в JS (летнее время, високосные годы, часовые пояса и т. Д.), А Moment заботится обо всем. Это делает жизнь намного проще, поэтому я бы рекомендовал вам ее использовать. –