Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/09/2012, 21:22
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
[Aporte] Datepicker jquery interactuar con el nombre del campo en el valor

Si lo sé he caido bajo, espero me perdonen

Aqui les expongo algo que me costó un poco de trabajo por varias cosas que se den lograr, hay una que todavía no logro resolver pero cuando lo tenga lo expongo.

La idea de este código es lograr dejar un valor por defecto en los campos cuando el usuario no esté interactuando con el campo. Una vez que usuario esté interactuando entonces modificamos los valores a lo que el usuario ha deseado

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="en">
  3.     <meta charset="utf-8">
  4.     <title>Demo Datepicker</title>
  5.     <link rel="stylesheet" href="css/jquery.ui.all.css">
  6.     <style>
  7.     input{
  8.         color: #999999;
  9.     }
  10.     .writing{
  11.         color: #000000;
  12.     }
  13.     </style>
  14.     <script src="js/jquery-1.8.0.min.js"></script>
  15.     <script src="js/jquery.ui.core.js"></script>
  16.     <script src="js/jquery.ui.widget.js"></script>
  17.     <script src="js/jquery.ui.datepicker.js"></script>
  18.     <script>
  19.     $(function(){
  20.         /**
  21.          * Escribirá en formato YYYY-MM-DD (esto lo hago por el uso y formato en que se escriben las fechas en la base de datos)
  22.          * Esto es a gusto los valores que escribí, solo es cuestión de leer la documentación y modificar los valores correspondientes
  23.          */
  24.         var dates = $( "#from, #to" ).datepicker({
  25.             dateFormat: "yy-mm-dd",
  26.             defaultDate: 0,
  27.             minDate: 0,
  28.             changeMonth: true,
  29.             changeYear: true,
  30.             numberOfMonths: 1,
  31.             showButtonPanel: true,
  32.             onSelect: function( selectedDate ) {
  33.                 var option = this.id == "from" ? "minDate" : "maxDate",
  34.                     instance = $( this ).data( "datepicker" ),
  35.                     date = $.datepicker.parseDate(
  36.                         instance.settings.dateFormat ||
  37.                         $.datepicker._defaults.dateFormat,
  38.                         selectedDate, instance.settings );
  39.                 dates.not( this ).datepicker( "option", option, date );
  40.  
  41.                 /**
  42.                  * Importante para que se ejecute la función change()
  43.                  * no se puede usar $( this ) porque no modifica el que debe, se debe indicar cual exactamente por eso
  44.                  * $( "#from, #to" )...
  45.                  */
  46.                 $( "#from, #to" ).change();
  47.             }
  48.         }).focus(function(){
  49.             /**
  50.              * El id y el valor deben tener los mismos caracteres a excepción de :
  51.              * el id se escribe en el campo en cualquier forma sea mayúscula o minúscula y luego se comparara
  52.              * colocándolo en mayúscula contra lo que está en el valor
  53.              *
  54.              * No hay que preocuparse que el usuario escriba otros caracteres porque datepicker
  55.              * se encarga de solo dejar escribir números y guion y otros caracteres que se usan para formar una fecha
  56.              * por lo que solo va a estar lo que hayas colocado por defecto
  57.              *
  58.              * Así es con .blur y con .change
  59.              */
  60.             if( $( this ).val( ).toUpperCase() == ( $( this ).attr("id").toUpperCase() + ":" ) ){
  61.                 $( this ).val( "" ).addClass( "writing" );
  62.             }
  63.         }).blur(function(){
  64.             if( $( this ).val( ) == "" || $( this ).val( ).toUpperCase() == ( $( this ).attr("id").toUpperCase() + ":" ) ){
  65.                 $( this ).val( $( this ).attr("id").toUpperCase() + ":" ).removeClass( "writing" );
  66.             }
  67.         }).change(function(){
  68.             if( $( this ).val( ) != "" && $( this ).val( ).toUpperCase() != ( $( this ).attr("id").toUpperCase() + ":" ) ){
  69.                 $( this ).addClass( "writing" );
  70.             }
  71.             else{
  72.                 $( this ).val( $( this ).attr("id").toUpperCase() + ":" ).removeClass( "writing" );
  73.             }
  74.         });
  75.     });
  76.     </script>
  77. </head>
  78.  
  79. <p>Dates: <input type="text" id="from" value="FROM:"><input type="text" id="to" value="TO:"></p>
  80.  
  81. </body>
  82. </html>

Lo único que no logro solventar es que cuando el usuario a seleccionado los dos campos sin seleccionar fecha solo seleccionó y luego quito cuando selecciona una fecha, despues de haber hecho lo que indiqué anteriormente, se coloca en el campo que seleccionó la fecha que quiso y en el otro campo otra fecha, puede ser la que está seleccionado como puede ser la fecha corriente. Si alguien logra que se evite esto seria bueno que lo postee para que así nos podamos beneficiar.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos