jQuery UI datepicker onChangeMonthYear和inst参数

时间:2011-09-12 12:56:12

标签: jquery-ui datepicker

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

如何使用 onChangeMonthYear 的'inst'参数自动选择当月的第一天?

请参阅: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 个答案:

答案 0 :(得分:8)

如果没有特别原因要使用inst,您可以随时使用this

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

查看实际操作:http://jsfiddle.net/william/sD8rL/2/

答案 1 :(得分:1)

William Niu的解决方案并未考虑其他日期格式(例如dd-mm-yyyy)。 您最好从日期选择器中获取Date对象,并按照您喜欢的方式进行修改(即设置该月的第一天)。修改后,您可以将修改后的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格式表示月份,而Date对象处理0-11。

希望这可以帮助,再见!