Agregar un calendario es muy sencillo gracias a JQuery, especificamente se llama datepicker, y esta linda funcion nos permite agregar un calendario muy personalizado a nuestra pagina web o formulario.
En algunas ocasiones necesitamos poner un calendario que sea dinamico, es decir, agregar en cada fila en un campo determinado un calendario, por ejemplo, tenemos en un formulario un boton «Agregar» en donde el Usuario agregara N veces una fila que entre sus campos tiene un input con la fecha, datepicker nos es muy util aqui pero al ser dinamico tiende a marearse y la fecha la va guardando solo en el primer input.
Una forma muy sencilla de solucionar esto es no instanciar o inicializar por primera vez el datepicker, si no que a nuestro input fecha le agregaremos una clase llamada fechaDP, esta clase la tendra SOLO el input que este activo (esta es una forma facil y rapida de hacerlo, tu puedes hacer lo que desees, eso lo dejo a tu imaginacion).
Entonces, tenemos el siguiente input
<input type="text" id="fecha0" name="fecha0" class="fechaDP">
El cual se agregara de forma dinamica cada vez que pulse en el boton «Agregar» y lo unico que cambiara por razones obvias debera ser el id y el name del input, para que al enviarlo se reciban todos de forma unica.
Entonces, solo faltaria agregar la magia del datepicker, asi que con este sencillo codigo agregado en nuestro document de la funcion JQuery quedaria listo, porque en esa funcion? para que cuando termine de cargar la pagina, cargue estas funciones.
$(".fechaDP").on('focus', function(){ var $this = $(this); $this.datepicker({ prevText: '<', nextText: '>', dateFormat: "dd-mm-yy" }); $this.datepicker("show"); });
Entonces, cuando el Usuario hago clic en nuestro input se lanzara nuestra funcion ya que el focus estara en el campo con la clase fechaDP y se iniciaria.
Esta demas decir que requiere la libreria de JQuery y la de JQuery UI, estas las puedes descargar desde la misma pagina de JQuery.
EDITO:
Quito esta linea del codigo, debido a que al retroceder en los meses, se buguea y pasa al año 1900 y fraccion
$this.removeClass("hasDatepicker");
Por lo tanto, si al hacer click en un input y seleccionar una fecha, te la deja en otro input, es porque la clase «hasDatepicker» esta danto problemas, prueba quitandolas en todos los demas, el solo te la agregara cuando hagas click en el input y te despliegue el calendario