Re: predeterminar un select formado automaticamente Cita:
Iniciado por Shiryu_Libra ![Adios](http://static.forosdelweb.com/fdwtheme/images/smilies/adios.gif) de hecho te entendi desde el primero, solo que un post sin bromas, no es un post ultimamente, y pues mirando tu codigo que me has proporcionado Código PHP: var dias = c.split(",");
for (var i=0;i<dias.length;i++){
var nueva_opcion = adOpt(select_dias, i, dias[i], dias[i]);
if( dia == i )
nueva_opcion.selected = true;
}
esta perfecto... solo que un detallito amigo.... nada serio... Código PHP: if( dia == i )
nueva_opcion.selected = true;
}
solo que en esta parte de la evaluacion
debemos poner Código PHP: if( dia == i )
nueva_opcion.options[i].selected = true;
}
para que efectivamente selecciones lo que anteriormente escribiste Creo que has pasado por alto que nueva_opcion es la opción (que te devuelve adOpt()), no es el select. El select es select_dias, así que no veo fallos.
He hecho un par de cambios con tu permiso ![apachar ojo](http://static.forosdelweb.com/fdwtheme/images/smilies/wink.png) . He simplificado ciertas cosas.
Lo primero es utilizar getFullYear().
Al principio, para rellenar los selects has puesto un bucle for que recorre los valores 0,1,2. Pero luego has puesto un switch con esos mismos casos. No tiene mucho sentido poner un switch si se va a entrar en todos los casos obligatoriamente. He quitado el bucle y el switch, que se anulaban mutuamente.
También he añadido soporte para años bisiestos (faltaría hacer lo mismo que hacemos con los meses de Cambiar, pero con los años).
En el switch de Cambiar también he simplificado algo, me parecía más cómodo así. Código PHP: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<select id="years" name="years"></select>
<select id="months" name="months" onchange="Cambia(document.getElementById('days'))" ></select>
<select id="days" name="days"></select>
<script language="JavaScript">
var a="Elegir Dia,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28";
var b="Elegir Dia,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29";
var c="Elegir Dia,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30";
var d="Elegir Dia,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31";
var e="Elegir Mes,Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre";
var f="Elegir Año,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013";
var mydate=new Date();
var year=mydate.getFullYear(); // full en vez de normal, el normal está en desuso
var dia=mydate.getDay();
var mes=mydate.getMonth();
if (dia<10){dia="0"+dia;}
if (mes<10){mes="0"+mes;}
//if (year < 1000){year+=1900;}
function addOpt(oCtrl, iPs, sTt, sVl){
var sOpcion=new Option(sTt, sVl);
oCtrl.options[iPs]=sOpcion;
return sOpcion;
}
function esBisiesto(nAno){
var bRes = true;
res = bRes && (nAno % 4 == 0);
res = bRes && (nAno % 100 != 0);
res = bRes || (nAno % 400 == 0);
return bRes;
}
function inicializar(){
alert("Dia "+dia+" mes "+mes+" year "+year);
//Este pedazo es para los ciclos
//ele=f.split(",");
//oCtrl=document.getElementById('cicloa');
//while (oCtrl.length) oCtrl.remove(0);
//for (i=0;i<ele.length;i++){addOpt(oCtrl, i, ele[i], ele[i]);}
//este otro para los demas controles de fecha
//años
ele=f.split(",");
oCtrl=document.getElementById('years');
while (oCtrl.length) oCtrl.remove(0);
for (var i=0;i<ele.length;i++){
var nueva_opcion = addOpt(oCtrl, i, ele[i], ele[i]);
if(ele[i]==year){nueva_opcion.selected = true;}
}
//meses
ele=e.split(",");
oCtrl=document.getElementById('months');
while (oCtrl.length) oCtrl.remove(0);
for (var i=0;i<ele.length;i++){
var nueva_opcion = addOpt(oCtrl, i, ele[i], i);
if( (i-1)==mes ){nueva_opcion.selected = true;}
}
//dias
ele = esBisiesto(year) ? b : a;
ele=ele.split(",");
oCtrl=document.getElementById('days');
while (oCtrl.length) oCtrl.remove(0);
for (var i=0;i<ele.length;i++){
var nueva_opcion = addOpt(oCtrl, i, ele[i], ele[i]);
if(ele[i]==dia){nueva_opcion.selected = true;}
}
}
function Cambia(oCtrl) {
var qmes, i=document.getElementById('months').selectedIndex;
switch (i) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12: qmes=d; break;
case 4: case 6: case 9: case 11: qmes=c; break;
case 2: qmes=esBisiesto(year)? b : a; break;
default: qmes=false;
}
if( qmes ) {
while (oCtrl.length) oCtrl.remove(0);
ele=qmes.split(",");
for(i=0;i<ele.length;i++) {
addOpt(oCtrl, i, ele[i], ele[i]);
}
}
}
window.onload = inicializar;
</script>
</BODY>
</HTML>
Bueno, supongo que así más o menos empezaríamos a tenerlo, pero falta el detallito ese de cambiar los días si el año cambia a bisiesto
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. |