jQuery UI datepicker onChangeMonthYear и параметр inst

$('.selector').datepicker({
   onChangeMonthYear: function(year, month, inst) { ... }
});

Как я могу использовать параметр "inst"onChangeMonthYear для автоматического выбора первого дня месяца?

см.:http://jsfiddle.net/sD8rL/

в настоящее время я использую код ниже, но я чувствую, что должен иметь возможность использовать переменную "inst" более прямолинейно.

   $(".datepicker" ).datepicker({
      changeMonth: true,
      changeYear: true,
      maxDate:0,
      onChangeMonthYear: function(year, month, inst){
        // set date to 1st on year or month change

        // this seems  bit janky, but works
        $('#' + inst.id).datepicker( "setDate", month + '/1/' + year );

        // Can't I use the instatnce to set the date?

        // $(inst).datepicker( "setDate", month + '/1/' + year ); // fails
        // inst.datepicker( "setDate", month + '/1/' + year ); // fails
        // inst.selectedDay = 1; // fails
        // inst.currentDay = 1; // fails 
      }
  });

2 ответов


Если нет особой причины, по которой вы хотите использовать inst, вы всегда можете использовать this:

  onChangeMonthYear: function(year, month, inst){
     $(this).datepicker( "setDate", month + '/1/' + year );
  }

увидеть его в действии: http://jsfiddle.net/william/sD8rL/2/.


решение William Niu не учитывает другие форматы дат (например, dd-mm-yyyy). Вы лучше получить объект Date из datepicker и изменить его, как вам нравится (т. е. первый день месяца). После внесения изменений можно повторно передать измененный объект Date в datepicker.

    dateFormat: "dd-mm-yy",
    onChangeMonthYear: function(year, month, inst){
      var selectedDate = $(this).datepicker( "getDate" );//Date object
      selectedDate.setDate(1);//set first day of the month
      selectedDate.setMonth(month-1);//month is 1-12, setMonth is 0-11
      selectedDate.setFullYear(year);
      $(this).datepicker( "setDate", selectedDate );
   }

таким образом, вы не будете перезаписывать формат даты (возможно, установленный во время инициализации datepicker);)

обратите внимание на формат месяца: datepicker обрабатывает 1-12 формат для месяцев, в то время как объект даты 0-11.

надеюсь, это может помочь, пока!