Foros del Web » Programando para Internet » Javascript »

Selector de día, mes y año de faq 237 con selects con valor ""

Estas en el tema de Selector de día, mes y año de faq 237 con selects con valor "" en el foro de Javascript en Foros del Web. Hola a ver sin me consigo explicar porque llevo buscando toda la mañana la manera de hacerlo y nada. Lo que quiero es lo siguiente: ...
  #1 (permalink)  
Antiguo 05/01/2008, 07:34
 
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 78
Antigüedad: 18 años, 7 meses
Puntos: 0
Selector de día, mes y año de faq 237 con selects con valor ""

Hola a ver sin me consigo explicar porque llevo buscando toda la mañana la manera de hacerlo y nada.

Lo que quiero es lo siguiente: utilizar el script del faq 237 (genial por cierto) pero haciendo que en vez de mostrar por defecto la fecha actual muestre los tres selects con value="" o algo del estilo a:

Código PHP:
<select name='ano'>
<
option value=''>Seleccione un día</option>
</
select>

<
select name='mes'>
<
option value=''>Seleccione un Mes</option>
</
select>

<
select name='dia'>
<
option value=''>Seleccione un Año</option>
</
select
es para despues poder validar que el usuario realmente a seleccionado su fecha de nacimiento y no que simplemente ha dado al submit con la fecha sin tocar es decir con la fecha de hoy.

2. pregunta.

Se puede hacer que el mismo script en vez de cojer las fechas desde 1960 hasta el dia de hoy, solo permita seleccionar una fecha entre 1918 y 1990, digamos asegurarse que la persona tiene entre 18 años y 90 años .


Desde ya muchas gracias.

El script:

Código PHP:
<head>
  <
script language="JavaScript">

   var 
aMeses = new Array("Enero""Febrero""Marzo""Abril""Mayo""Junio""Julio""Agosto""Septiembre""Octubre""Noviembre""Diciembre")

function 
padNmb(nStrnLensChr){
    var 
sRes String(nStr);
    for (var 
0nLen String(nStr).lengthi++)
     
sRes sChr sRes;
    return 
sRes;
   }

function 
makeDateFormat(nDaynMonthnYear){
    var 
sRes;
    
sRes padNmb(nDay2"0") + "/" padNmb(nMonth2"0") + "/" padNmb(nYear4"0");
     return 
sRes;
   }
   
function 
addOpt(oCntrliPossTxtsVal){
    var 
selOpcion = new Option(sTxtsVal);
    
oCntrl.options.add(selOpcioniPos);
   }

function 
lastDayOfMonth(nMonthnYear){
    var 
aMonth = new Array(312831303130313130313031);
    if ((
nMonth == 2) && (nYear == 0))
     return 
29;
    else
     return 
aMonth[nMonth 1];
   }

function 
cambia(nCambiado){
    var 
nAno;
    var 
nMes;
    
with (document.frm){     
     
nAno parseInt(ano.options[ano.selectedIndex].value);
     switch (
nCambiado){
      case 
0:
       
llenaMes(mesnAno);
       
nMes parseInt(mes.options[mes.selectedIndex].value);
       
nDia parseInt(dia.options[dia.selectedIndex].value);
       
res.value makeDateFormat(nDianMes 1nAno);  
       break;
      case 
1:
       
nMes parseInt(mes.options[mes.selectedIndex].value);
       
llenaDia(dianAnonMes);
       
nDia parseInt(dia.options[dia.selectedIndex].value);
       
res.value makeDateFormat(nDianMes 1nAno);
       break;
      case 
2:
       
nMes parseInt(mes.options[mes.selectedIndex].value);
       
nDia parseInt(dia.options[dia.selectedIndex].value);
       
res.value makeDateFormat(nDianMes 1nAno);
       break;
      case 
3:
          
llenaMes(mesnAno);
      break;
     }
    }
   }

function 
llenaAno(oAno){
      var 
hoy = new Date();
    var 
ini 1960;
       for (var 
ini<= hoy.getYear(); i++)
     
addOpt(oAnoiniString(i), String(i));
     
oAno.options[i-ini-1].selected true;
     
cambia(3);
}

function 
llenaMes(oMesnAno){
    var 
hoy = new Date();
    var 
sel=0;
    if(
oMes.selectedIndex >=0) var sel=oMes.selectedIndex;
    var 
nFin 11;
    while (
oMes.length 0oMes.remove(0);
    if (
nAno == hoy.getYear()) 
    {
    
nFin hoy.getMonth();
    } 
    if (
sel>nFin)
        {
            
sel=nFin-1;
        }  
    for (var 
0<= nFini++)
     
addOpt(oMesiaMeses[i], String(i));
     
oMes.options[sel].selected true;
     
cambia(1);
   }

function 
llenaDia(oDianAnonMes){
    var 
hoy = new Date();
    var 
sel=0;
    if(
oDia.selectedIndex >=0) var sel=oDia.selectedIndex;
    var 
nFin lastDayOfMonth(nMes 1nAno);
    while (
oDia.length 0oDia.remove(0);
     if (
nAno == hoy.getYear() && nMes == hoy.getMonth()) 
    {
    
nFin hoy.getDate();
    }
    if(
sel>nFin)
        {
            
sel=nFin-1;
        }
    for (var 
1<= nFini++)
     
addOpt(oDiaiString(i), String(i));
        
oDia.options[sel].selected true;
   }

  
</script>
 </head>
 <body onload=" llenaAno(document.frm.ano)">
  <form name="frm">
   <table border="0">
    <tr>
     <td align="right">
      Año: 
     </td>
     <td>
      <select name="ano" onchange="cambia(0)" style="width: 80">
      </select>
     </td>
    </tr>
    <tr>
     <td align="right">
      Mes: 
     </td>
     <td>
      <select name="mes" onchange="cambia(1)" style="width: 80">
      </select>
     </td>
    </tr>
    <tr>
     <td align="right">
      Día: 
     </td>
     <td>
      <select name="dia" onchange="cambia(2)" style="width: 80">
      </select>
     </td>
    </tr>
    <tr>
     <td align="right">
      Fecha:
     </td>
     <td>
      <input type="text" name="res" disabled>
     </td>
    </tr>
   </table>
  </form>
 </body>
</html> 
  #2 (permalink)  
Antiguo 05/01/2008, 09:36
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Selector de día, mes y año de faq 237 con selects con valor ""

Hola brainstorm:

Bueno, vamos a meternos con el código. En el principio los selects están vacíos, y cuando se carga la página se llama a llenaAno() (buen nombre ). Para cambiar el rango de fechas cambia la variable ini y el momento en el que acaba el bucle for dentro de esta misma función (ahora está para el año actual, deberías cambiarlo por 1990 si no me equivoco).

Si quieres cambiar la fecha que se selecciona inicialmente, en la misma función llenaAno() tienes qué año se selecciona automáticamente en ésta línea:
oAno.options[i-ini-1].selected = true;
Que actualmente es el último año añadido.

Luego se llama a cambia(3);, que directamente llama a llenaMes(mes, nAno); y volvemos a tener, debajo del bucle for, la option que se selecciona por defecto:
oMes.options[sel].selected = true;

Finalmente se llama a cambia(1) que coloca los días, y es exactamente igual.



Espero que estas pistas te ayuden en tu propósito.

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 05/01/2008, 10:15
 
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 78
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Selector de día, mes y año de faq 237 con selects con valor ""

Gracias derkenuke pero para mi el javascript es ese gran desconocido.

Lo de la fecha esta clarisimo sustituir 1960 por 1980 pero se que se puede cojer la fecha actual y restarle 80 años. Vamos que lo haga automaticamente. y con le fecha final mas de los mismo la fecha actual menos 18.

Pero el principal problema que tengo es querria que me quedaran los combos asi mas o menos:

Código PHP:
<select name='dia'
<
option value=''selected>Seleccione un día</option
<
option value='1'>1</option
<
option value='2'>2</option
<
option value='3'>3</option
<
option ......
</
select

<
select name='mes'
<
option value=''selected>Seleccione un Mes</option
<
option value='Enero'>Enero</option
<
option value='Febrero'>Febrero</option
<
option value='Marzo'>Marzo</option
<
option ......
</
select

<
select name='ano'
<
option value=''selected>Seleccione un Año</option
<
option value='1980'>1980</option
<
option value='1981'>1981</option
<
option value='1982'>1982</option>
<
option ......
</
select
  #4 (permalink)  
Antiguo 05/01/2008, 10:18
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Selector de día, mes y año de faq 237 con selects con valor ""

Cita:
Iniciado por brainstorm
Gracias derkenuke pero para mi el javascript es ese gran desconocido.
Creo, entonces, que tendrías que haber especificado eso desde el principio.

Me habría ahorrado el post.



Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 05/01/2008, 15:12
 
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 78
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Selector de día, mes y año de faq 237 con selects con valor ""

Bueno y alguna alma candida que me lo de hecho?.
He buscado y buscado por Internet y lo unico que se encuentra es cientos de ejemplos de al presionar un input que aparezca un calendario con CSS en un capa y en algunos con selectores de mes y año pero pesan mucho 20 kb y en algunos mucho mas, este me gustaba mucho porque lo veo el mas usable de cara al usuario y solo pesa 3 kb.

El html lo leo y lo entiendo, el php lo leo entiendo algo y lo que no busco en cualquier buscador y mas o menos en seguida sabes para que sirve cada cosa y tienes mil ejemplos. Pero el JavaScript es que si no eres programador o has estudiado algo de programacion no hay por donde pillarlo, al menos yo. Excepto pequeñas cosas lo demas me parece un galimatias
  #6 (permalink)  
Antiguo 06/01/2008, 04:34
 
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 78
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Selector de día, mes y año de faq 237 con selects con valor ""

He conseguido que trabaje entre las fechas que necesitaba, es decir mayor de 18 y menor de 90 años actualizandose automaticamente. Por si le sirve a alguien:

El cambio que he hecho es:

Código PHP:
function llenaAno(oAno){ 
      var 
hoy = new Date(); 
    var 
ini hoy.getYear()-90
       for (var 
ini<= hoy.getYear()-18i++) 
     
addOpt(oAnoiniString(i), String(i)); 
     
oAno.options[i-ini-1].selected true
     
cambia(3); 

Pero sigo sin conseguir añadir los
Código PHP:
<option value=''selected>Día</option
a:
Código PHP:
oAno.options[i-ini-1].selected true
como indicaba derkenuke.

Almas caricativas AYUDA
  #7 (permalink)  
Antiguo 11/01/2008, 11:20
 
Fecha de Ingreso: enero-2008
Mensajes: 1
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Selector de día, mes y año de faq 237 con selects con valor ""

Hola que tal!!
Aqui te paso la solución para que te queden seleccionados los combos de dia mes y año en el lugar que vos queres.

En el codigo HTML, debajo de los select de dia, mes y anio, hace lo siguiente

<script type="text/javascript">

addOpt(document.frm.ano, 0, "Seleccione Año", "0");
document.frm.options[0].selected = true;

addOpt(document.frm.dia, 0, "Seleccione Día", "0");
document.frm.dia.options[0].selected = true;

addOpt(document.frm.mes, 0, "Seleccione Mes", "0");
document.frm.mes.options[0].selected = true;
</script>

Lo que hace es lo siguiente:
el addOpt , agrega una nueva opcion al select, en la posicion 0, con el texto "Seleccione Año"
La otra linea hace que el select tenga seleccionado el elemento de la posicion 0.

Mucha suerte
  #8 (permalink)  
Antiguo 12/01/2008, 06:52
 
Fecha de Ingreso: septiembre-2005
Ubicación: España
Mensajes: 78
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Selector de día, mes y año de faq 237 con selects con valor ""

Gracias Malandra77 y bienvenida al foro.

Te comento: No va, pero me explico, hago lo que has dicho y lo añado justo detras de la etiqueta </form> y no hace nada, pero he cambiado en el script principal esto (para que no lo marcara el combo como selected:

Código PHP:
     addOpt(oAnoiniString(i), String(i)); 
     
oAno.options[i-ini-1].selected true
por esto:
Código PHP:
     addOpt(oAnoiniString(i), String(i)); 
     
oAno.options[i-ini-1].selected false
y se consigue que aparezca el "seleccione año" en el combo del año (eso si al final de todos lo años) pero efectivamente como seleccionado por defecto.

He probado haciendo la misma modificacion en el de mes y año cambiando el "true" por "false" pero en los combos de mes y dia nada de nada, no se produce ningun cambio.

De todas formas gracias.
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 23:09.