Foros del Web » Programando para Internet » Jquery »

jQuery datePicker inline personalizado

Estas en el tema de jQuery datePicker inline personalizado en el foro de Jquery en Foros del Web. Hola a todos, Estoy usando datepicker + fullCalendar para manejar una agenda: http://jqueryui.com/demos/datepicker/#inline Usando el datepicker inline, necesito poder colorear los días que no estén ...
  #1 (permalink)  
Antiguo 05/07/2012, 04:52
 
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 12
Antigüedad: 12 años, 5 meses
Puntos: 1
jQuery datePicker inline personalizado

Hola a todos,
Estoy usando datepicker + fullCalendar para manejar una agenda:

http://jqueryui.com/demos/datepicker/#inline

Usando el datepicker inline, necesito poder colorear los días que no estén disponibles de otro color (que es diferente a bloquearlos, ya que en este caso si podemos seleccionarlos).

En resumen: Necesito colorear los días que están llenos en la agenda de otro color en el datepicker.

Problema: Si lo fuerzo manualmente consigo colorear estos días, pero desde que seleccione otro día o haga cualquier acción en el datepicker, se me restablecen los colores originales (no hay eventos que me permitan forzarlo nuevamente tras las acciones).

¿Alguien tiene idea de cómo poder solucionar esto?

¡Saludos!
  #2 (permalink)  
Antiguo 05/07/2012, 14:30
Avatar de quike88  
Fecha de Ingreso: agosto-2008
Mensajes: 471
Antigüedad: 16 años, 3 meses
Puntos: 87
Respuesta: jQuery datePicker inline personalizado

Hola,

Este tema te podría ser de ayuda, donde masterpuppet propone esta solución:

Código Javascript:
Ver original
  1. var events = ['15-1-2011', '16-1-2011', '17-1-2011', '18-1-2011'];
  2.    
  3.         $( "#datepicker" ).datepicker({
  4.             showWeek: true,
  5.             firstDay: 1,
  6.             beforeShowDay: function(date) {
  7.                 var current  = date.getDate() + '-' + (date.getMonth() + 1) + '-' + date.getFullYear();
  8.                 return jQuery.inArray(current, events) == -1
  9.                 ? [true, '']
  10.                 : [true, 'ui-state-highlight', 'tool-tip-text'];
  11.             }
  12. });

Saludos.
  #3 (permalink)  
Antiguo 06/07/2012, 01:54
 
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 12
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: jQuery datePicker inline personalizado

Hola quike88,
Gracias por contestar.

El ejemplo que me envías fue lo primero que intenté en su momento, pero no me dio resultado.

He hecho lo siguiente para que funcionara:
- Usar beforeShowDay del datepicker para declarar que dias están bloqueados (hay que bloquearlos).
- Usar los días bloqueados para representar los días no disponibles.
- Forzar estilos de los días bloqueados en el head para que se visualicen a tu gusto.
- Forzar funcionamiento de selección usando las clases del datepicker.

Estilos forzados de los días bloqueados:
Código:
<style type="text/css">

td.ui-datepicker-unselectable span.ui-state-default, td.ui-state-disabled span.ui-state-default{
	background: red;
}

td.ui-datepicker-unselectable span.ui-state-active, td.ui-state-disabled span.ui-state-active{
	background:#3053AB;
}

td.ui-datepicker-unselectable:hover, td.ui-state-disabled:hover{
	cursor: pointer !important;
}

td.ui-datepicker-unselectable:hover span, td.ui-state-disabled:hover span{
	cursor: pointer !important;
	background: blue;
}

</style>
Evento que selecciona los días bloqueados:
Código:
var arrMonthNames = ["Enero", "Febrero", ...];

$(".ui-datepicker-unselectable").live("click", function(e){
		
        // Si no es el dia bloqueado de otro mes
	if (! $(this).hasClass("ui-datepicker-other-month")){
		
		// Sacamos el mes que se esta visualizando actualmente a traves del datepicker
		var strMonth = $(".ui-datepicker-month").html();
				
		// Establecemos el dia, mes y anio
		var intDay =  $(this).find("span").html();
		var intMonth = $.inArray(strMonth, arrMonthNames);
		var intYear =  $(".ui-datepicker-year").html();
			
		// Guardamos en la variable global la fecha
		datSelectedData = new Date(intYear, intMonth, intDay);
			
		// Desmarcamos el dia seleccionado
		trSelected = $(".ui-datepicker-calendar").find("td").find(".ui-state-active");
		trSelected.removeClass("ui-state-active");
		
				
		// Marcamos el dia seleccionado
		$(this).find("span").addClass("ui-state-active");
				
		// Pasamos el fullCalendar a vista por dias en la fecha seleccionada
		$("#calendar").fullCalendar("changeView", "agendaDay");			
		$("#calendar").fullCalendar("gotoDate", datSelectedData);
	}
});
Personalmente no recomiendo este tipo de cosas, porque si queremos mantener actualizado el datepicker, si éste sufre algún cambio en las clases que usa probablemente deje de funcionar. Por otro lado, de esta forma no podremos bloquear verdaderamente otros días. Igualmente les dejo el código porque puede que le sirva de ayuda a otras personas.

¡Saludos!

Etiquetas: colores, datepicker, inline, personalizados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:43.