Un problema que me llevó bastantes días resolverlo en el trabajo, fue el de implementar una página en la que se mostraran dos calendarios. Uno para seleccionar una "Fecha de inicio", y el otro en la cual seleccionar una "Fecha de Fin", para parametrizar los resultados de una exportación.
Hasta acá no había mayores problemas que el de elegir con qué herramientas iba a afrontar el desafío.
Para esto, noté que existía en la librería "jQuery-UI", un widget bastante utilizado llamado "DatePicker".
El widget, por defecto, se presenta como un textbox en el cual al hacer click sobre el mismo despliega un calendario que nos da la posibilidad de elegir una fecha. Mi idea de momento, era el de hacerlo un poco mas estético, mostrando un botón con un calendario dibujado, que solamente al hacer click sobre dicho botón se despliegue dicho calendario.
Existe en la presentación de dicho control un ejemplo llamado "Icon Trigger", el cual agrega un botón junto al textbox, que dispara la apertura del calendario. En el ejemplo puede verse una imágen de un calendario bastante precaria, y la idea era dibujar un calendario sobre los estéticos botones que podemos conseguir hoy en día con Bootstrap.
Revisando la documentación del control en la "API Documentation", encontré mas información de la opción "ShowOn" y cómo utilizarla para lograr mi objetivo. Pude ver que se puede elegir si disparar el calendario desde un click en el textbox, en el botón, o hacerlo desde ambos (como dije anteriormente, mi idea era hacerlo sólamente desde el botón).
Entonces procedí a dibujar los controles sobre una página html:
El código del ejemplo anterior sería el siguiente:
<div class="container well col-md-12">
<form class="form-horizontal" id="formExportar" method="post">
<div class="row">
<div class="col-md-6 form-group">
<label class="col-md-5 control-label" for="txtFechaI" style="color: black;">Fecha Ini:</label>
<div class="col-md-7 input-group" id="divFechaI">
<input class="form-control" id="txtFechaI" placeholder="dd/mm/yyyy" type="text" />
</div><!-- /input-group -->
</div><!-- /form-group -->
<div class="col-md-6 form-group">
<label class="col-md-5 control-label" for="txtFechaF" style="color: black;">Fecha Fin:</label>
<div class="col-md-7 input-group" id="divFechaF">
<input class="form-control" id="txtFechaF" placeholder="dd/mm/yyyy" type="text" />
</div><!-- /input-group -->
</div><!-- /form-group -->
</div><!-- /row -->
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-2">
<button class="btn btn-success" id="btnExportSol">
<span class="glyphicon glyphicon-download-alt"></span> Export1</button>
</div><!-- /col-md-2 -->
<div class="col-md-1"></div>
<div class="col-md-2">
<button class="btn btn-success" id="btnExportSolEst">
<span class="glyphicon glyphicon-download-alt"></span> Export2</button>
</div><!-- /col-md-2 -->
</div><!-- /row -->
</form>
</div>
Lo que resta para obtener el control tal y como lo quería, es manipular un poco los DIVs que contienen a los textbox donde se ingresa la fecha, para así añadirles el botón a cada uno, con su correspondiente calendario.
Lo mencionado anteriormente se logra con el siguiente script:
<script>
$(document).ready(function() {
$("#txtFechaI").datepicker({
showOn: "button",
dateFormat: "dd/mm/yy",
maxDate: "+0d",
onClose: function( selectedDate ) {
$( "#txtFechaF" ).datepicker( "option", "minDate", selectedDate );
var x = $("#divFechaF button");
x.text("");
x.addClass("btn btn-success");
x.append("<span class='glyphicon glyphicon-calendar'></span>");
var c = $("#spFechaF");
c.append(x);
}
});
$("#txtFechaF").datepicker({
showOn: "button",
dateFormat: "dd/mm/yy",
maxDate: "+0d",
onClose: function( selectedDate ) {
$( "#txtFechaI" ).datepicker( "option", "maxDate", selectedDate );
var y = $("#divFechaI button");
y.text("");
y.addClass("btn btn-success");
y.append("<span class='glyphicon glyphicon-calendar'></span>");
var d = $("#spFechaI");
d.append(y);
}
});
var divFechaI = $("#divFechaI");
divFechaI.append("<span id='spFechaI' class='input-group-btn'>");
var divFechaF = $("#divFechaF");
divFechaF.append("<span id='spFechaF' class='input-group-btn'>");
var btnFechaI = $("#divFechaI button");
btnFechaI.text("");
btnFechaI.addClass("btn btn-success");
btnFechaI.append("<span class='glyphicon glyphicon-calendar'></span>");
var btnFechaF = $("#divFechaF button");
btnFechaF.text("");
btnFechaF.addClass("btn btn-success");
btnFechaF.append("<span class='glyphicon glyphicon-calendar'></span>");
var spFechaI = $("#spFechaI");
spFechaI.append(btnFechaI);
var spFechaF = $("#spFechaF");
spFechaF.append(btnFechaF);
});//end doc ready
</script>
Un saludo,
Juan Daniel.
