2011-09-12 16 views
7
$('.selector').datepicker({ 
    onChangeMonthYear: function(year, month, inst) { ... } 
}); 

¿Cómo puedo utilizar el parámetro 'inst' de onChangeMonthYear a seleccionar automáticamente el primer día del mes?jQuery UI selector de fechas onChangeMonthYear y el parámetro inst

véase: http://jsfiddle.net/sD8rL/

Actualmente estoy usando el código de abajo, pero me siento como si debiera ser capaz de utilizar la variable 'inst' de una manera más sencilla.

$(".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 
     } 
    }); 

Respuesta

8

Si no hay ninguna razón particular que desea utilizar inst, siempre se puede utilizar this:

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

verlo en acción: http://jsfiddle.net/william/sD8rL/2/.

+0

Tiene todo el sentido que realmente no tenía ninguna razón en particular para usar 'inst', 'esto' funciona muy bien. – ActionOwl

1

La solución de William Niu no tiene en cuenta otros formatos de fecha (como dd-mm-yyyy). Será mejor que obtenga un objeto Date de su datepicker y lo modifique de la manera que desee (es decir, estableciendo el primer día del mes). Después de sus modificaciones, puede volver a pasar el objeto Date modificado a su 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); 
    } 

De esta manera no va a sobrescribir el formato de fecha (posiblemente establecido durante la inicialización del selector de fechas);)

Tenga en cuenta el formato de mes: selector de fechas maneja un formato de 1-12 meses, mientras que el objeto Date es 0-11.

Espero que esto pueda ayudar, ¡adiós!

Cuestiones relacionadas