amsul / pickadate.js

The mobile-friendly, responsive, and lightweight jQuery date & time input picker.
http://amsul.ca/pickadate.js
MIT License
7.7k stars 1.02k forks source link

set and on.set functions not working on iOS #1186

Closed pandastein closed 4 years ago

pandastein commented 4 years ago

Hi I have integrated pickadate library (v 3.5.*) in a project, but only on iOS (iPhone, Safari) the .set function and the on.('set') event not working at all.

On desktop all run well (Chrome and Safari), I don't know why.

`var initDatePicker = function () { var configdate = {};

if (site.App.config('locale') == 'fr') {

  configdate = {
    monthsFull: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
    weekdaysShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],
    today: 'aujourd\'hui',
    clear: 'effacer'
  };
}
else {

  configdate = {
    monthsFull: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    today: 'today',
    clear: 'clear',
    close: 'close'
  };
}

var $input = $('.datepicker').pickadate(configdate);
var $input2 = $('.datepicker2').pickadate(configdate);

console.log($input2);

var picker = $input.pickadate('picker');
var picker2 = $input2.pickadate('picker');

console.log(picker2);

picker.set('min', true);
picker2.set('min', +1);

var from_$input = $('#date_from').pickadate(),
  from_picker = from_$input.pickadate('picker');

var to_$input = $('#date_to').pickadate(),
  to_picker = to_$input.pickadate('picker');

from_picker.on('set', function (event) {
  if (event.select) {
    to_picker.set('min', from_picker.get('select'));

    var frompickerday = from_picker.get('select');
    var selectedDate = frompickerday.date,
      selectedMonth = frompickerday.month,
      selectedYear = frompickerday.year,
      selectedDateString = selectedYear + '/' + (selectedMonth + 1) + '/' + selectedDate;

    var today = new Date(selectedDateString);
    var tomorrow = new Date(selectedDateString);

    tomorrow.setDate(today.getDate() + 1);
    // if (window.location.href.indexOf("38") > -1) {
    //   tomorrow.setDate(today.getDate() + 3);
    // }

    to_picker.set('select', tomorrow);
    to_picker.set('min', tomorrow);
  }

  else if ('clear' in event) {
    to_picker.set('min', false);
  }
});

to_picker.on('set', function (event) {
  if (event.select) {
    var frompickerday = to_picker.get('select');
    var selectedDate = frompickerday.date,
      selectedMonth = frompickerday.month,
      selectedYear = frompickerday.year,
      selectedDateString = selectedYear + ',' + (selectedMonth + 1) + ',' + selectedDate;

  }
  else if ('clear' in event) {
    from_picker.set('max', false);
  }
});

};`

Above my function code. On iPhone it doesn't trigger the picker.set('min', true) and the picker2.set('min', +1). And it does not console.log() in the .on('set') event...

Any solution about that ?

Thank you,

pandastein commented 4 years ago

It was an mistake in my html code (in responsive mode), sorry