Los dropdowns de mes y año no se despliegan al hacer clic.
Problema: Los estilos CSS pueden estar bloqueando la funcionalidad nativa de los <select>
Solución: Mejorado CSS para preservar funcionalidad nativa:
.daterangepicker select.monthselect,
.daterangepicker select.yearselect {
/* Preservar apariencia nativa */
appearance: auto !important;
-webkit-appearance: menulist !important;
-moz-appearance: menulist !important;
/* Asegurar interactividad */
pointer-events: auto !important;
user-select: auto !important;
cursor: pointer !important;
/* Tamaño mínimo clickeable */
min-height: 20px !important;
min-width: 50px !important;
/* Padding mejorado */
padding: 1px 2px !important;
}Problema: Los eventos 'change' no se están capturando correctamente Solución: Implementado doble sistema de event listeners:
// 1. Event delegation en el contenedor
this.addEventHandler(this.container, 'change', this.containerChange.bind(this));
// 2. Event listeners directos como respaldo
setTimeout(() => {
const selects = this.container.querySelectorAll('select.monthselect, select.yearselect');
selects.forEach((select) => {
this.addEventHandler(select, 'change', this.monthOrYearChanged.bind(this));
});
}, 100);Problema: Al actualizar calendarios, los nuevos selectores no tienen event listeners Solución: Re-agregar listeners después de cada renderizado:
private updateCalendars(): void {
this.renderCalendar('left');
if (!this.options.singleDatePicker) {
this.renderCalendar('right');
}
// Re-agregar event listeners a los nuevos selectores
setTimeout(() => {
const selects = this.container.querySelectorAll('select.monthselect, select.yearselect');
selects.forEach(select => {
select.addEventListener('change', this.monthOrYearChanged.bind(this));
});
}, 10);
}Problema: El contenedor padre puede estar bloqueando eventos de los selectores Solución: CSS específico para permitir eventos:
/* Asegurar que el contenedor no bloquee eventos */
.daterangepicker .calendar-table th.month {
pointer-events: auto !important;
}
.daterangepicker .calendar-table th.month * {
pointer-events: auto !important;
}Agregado: Logs de debug para identificar problemas:
private monthOrYearChanged(event: Event): void {
console.log('monthOrYearChanged called', event.target);
// ... resto del método con logs detallados
}
private containerChange(event: Event): void {
const target = event.target as HTMLSelectElement;
if (target.matches('select.monthselect, select.yearselect')) {
console.log('Dropdown changed:', target.className, target.value);
this.monthOrYearChanged(event);
}
}- Abrir DevTools → Console
- Hacer clic en el input para abrir DateRangePicker
- Intentar cambiar mes/año
- Verificar logs:
"Calendar left rendered with 2 selects"
- Los dropdowns deben abrirse al hacer clic
- Al seleccionar un valor, debe cambiar el calendario
- Debe aparecer log:
"monthOrYearChanged called"
- Los selectores deben tener cursor pointer
- Deben tener apariencia nativa del navegador
- No deben estar bloqueados por otros elementos
✅ Dropdowns funcionando: Mes y año seleccionables ✅ Eventos capturados: Logs en consola al cambiar ✅ Calendario actualizado: Fechas cambian al seleccionar ✅ CSS correcto: Apariencia nativa preservada ✅ Compatibilidad: Funciona en todos los navegadores
- Verificar z-index: Asegurar que no hay elementos encima
- Probar sin CSS: Temporalmente remover estilos personalizados
- Verificar HTML: Confirmar que los
<select>se generan correctamente - Browser DevTools: Inspeccionar elementos y eventos
// En la consola del navegador:
document.querySelectorAll('.daterangepicker select').forEach((select) => {
console.log('Select found:', select.className, select.options.length);
select.addEventListener('change', (e) => console.log('Manual change:', e.target.value));
});¡Los dropdowns deberían funcionar correctamente ahora! 🚀