Foros del Web » Programando para Internet » Javascript »

2 selects pierden valores al volver

Estas en el tema de 2 selects pierden valores al volver en el foro de Javascript en Foros del Web. Buenas Gente!. HOy tengo esta pregunta para romperse el coco. pagina de referencia. http://www.forosdelweb.com/showpost....55&postcount=2 Estoy usando dos selects dependientes como lo explica este señor. Me ...
  #1 (permalink)  
Antiguo 18/03/2005, 13:02
Avatar de gaitagarcia  
Fecha de Ingreso: julio-2002
Mensajes: 79
Antigüedad: 22 años, 4 meses
Puntos: 0
2 selects pierden valores al volver

Buenas Gente!.
HOy tengo esta pregunta para romperse el coco.

pagina de referencia.
http://www.forosdelweb.com/showpost....55&postcount=2

Estoy usando dos selects dependientes como lo explica este señor. Me funciona de maravillas, ahora mi pregunta es como puedo hacer para que cuando por ejemplo si selecciono dos valores y envio el formulario, si hay algo mal en el fomulario y pongo history back -1 y vuelvo para atras siga manteniendo la opcion seleccionada del segundo select y no la vuelva a cero.
muchas gracias
G
  #2 (permalink)  
Antiguo 18/03/2005, 15:55
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
.... pues si en vez de utilizar history back-1 utilizaras un enlace tipo "atrás"... podrías pasar una variable que seria en valor de tu select y con eso imprimir el "selected" ... sencillo.... con PHP... manejar sesiones también podria servirte...

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 20/03/2005, 01:34
Avatar de gaitagarcia  
Fecha de Ingreso: julio-2002
Mensajes: 79
Antigüedad: 22 años, 4 meses
Puntos: 0
Otra respuesta?

Ya habia probado de esa manera, pero definitivamente, el onchange que lleva el select principal es el que no permite que se guarde algo en el select secundario, justamente por eso necesito la manera de poner de alguna manera que solamente se recarge el 2do select cuando se actualiza la pagina y no cuando se vuelve atras.

Muchas Gracias
G
  #4 (permalink)  
Antiguo 20/03/2005, 01:41
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
temo que eso último no entendí bien... podrías poner el código?
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 20/03/2005, 01:50
Avatar de gaitagarcia  
Fecha de Ingreso: julio-2002
Mensajes: 79
Antigüedad: 22 años, 4 meses
Puntos: 0
De acuerdo Aqui Va!

Si pue, mira con este ejemplo.

Código HTML:
<html> 
<head> 
  <title> 
   FAQ-1: Selects 
  </title> 
  <script language="JavaScript"> 

   function addOpt(oCntrl, iPos, sTxt, sVal){ 
     var selOpcion=new Option(sTxt, sVal); 
     eval(oCntrl.options[iPos]=selOpcion); 
   } 

   function cambia(oCntrl){ 
    while (oCntrl.length) oCntrl.remove(0); 
    switch (document.frm.pais.selectedIndex){ 
     case 0: 
      addOpt(oCntrl,  0, "Ciudad de México", "0"); 
      addOpt(oCntrl,  1, "Monterrey", "1"); 
      addOpt(oCntrl,  2, "Guadalajara", "2"); 
      break; 
     case 1: 
      addOpt(oCntrl,  0, "Madrid", "0"); 
      addOpt(oCntrl,  1, "Barcelona", "1"); 
      addOpt(oCntrl,  2, "San Sebastián", "2"); 
      break; 
     case 2: 
      addOpt(oCntrl,  0, "Caracas", "0"); 
      addOpt(oCntrl,  1, "Coro", "1"); 
      addOpt(oCntrl,  2, "Maracay", "2"); 
      addOpt(oCntrl,  3, "Valencia", "3"); 
      break; 
    } 
   } 
  </script> 
</head> 
<body> 
  <form name="frm" action="numero2.htm"> 
   <table border="0"> 
    <tr> 
     <td> 
      Pais 
     </td> 
     <td> 
      <select name="pais" onchange="cambia(document.frm.ciudad)"> 
       <option value="Mex">Mexico</option> 
       <option value="Esp">España</option> 
       <option value="Ven">Venezuela</option> 
      </select> 
     </td> 
     <td>&nbsp; 
       
     </td> 
     <td> 
      Ciudad 
     </td> 
     <td> 
      <select name="ciudad"> 
       <option value="0">Ciudad de México</option> 
       <option value="1">Monterrey</option> 
       <option value="2">Guadalajara</option> 
      </select> 
     </td> 
    </tr> 
   </table> 
   <input type="submit" name="Submit" value="Enviar">
  </form> 
</body> 
</html> 
el tema es que cuando vuelvo para atras pierde el valor el 2do select, por eso pregunto si no hay manera de que cuando vuelva atras siga manteniendo el valor del segundo select, el primero queda, compruebalo!.

Ya he intentado con poner un vinculo y que lleve la variable esas, pero igual me actualiza el segundo select y ahi pierde el valor.
gracias
G
  #6 (permalink)  
Antiguo 20/03/2005, 02:17
Avatar de gaitagarcia  
Fecha de Ingreso: julio-2002
Mensajes: 79
Antigüedad: 22 años, 4 meses
Puntos: 0
Mira aca

deremate.com.ar hace casi lo mismo que yo quiero hacer pero de otra menera indudablemente, fijate http://www.deremate.com.ar/AddUserNew/AdduserPaso1.asp ahi cuando seleccionas las provincias, que cambia, llena las pass y el codigo que te muestra, dale continuar, y mira que vuelve a poner la provincia y la localidad que seleccionaste anteriormente.
Eso es lo que quiero jeje
Gracias
G
  #7 (permalink)  
Antiguo 20/03/2005, 03:39
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Cita:
Iniciado por gaitagarcia
deremate.com.ar hace casi lo mismo que yo quiero hacer pero de otra menera indudablemente (...)
... no... fijate que al regresar pasa las variables por la URL... las toma e imprime lo seleccionado antes.

... Lo que quizá sí haga diferente es el echo de mandar a imprimir las opciones de las listas despegables.... si te daz cuenta utIlizan esto para definirlas:
Código:
function SelectRegion(niv) {
var si;
if (niv==1){
document.Form1.txtregion1.selectedIndex=0;
document.Form1.txtregion1.length=0;
document.Form1.txtregion1.disabled=0;
optregion(1,'Selecciona una Provincia','0','Capital Federal','25','Gran Buenos Aires','1','Buenos Aires','2','Catamarca','3','Chaco','4','Chubut','5','Córdoba','6','Corrientes','7','Entre Rios','8','Formosa','9','Jujuy','10','La Pampa','11','La Rioja','12','Mendoza','13','Misiones','14','Neuquén','15','Río Negro','16','Salta','17','San Juan','18','San Luis','19','Santa Cruz','20','Santa Fe','21','Santiago Del Estero','22','Tierra del Fuego','23','Tucumán','24');
}else{
document.Form1.txtregion2.selectedIndex=0;
si=document.Form1.txtregion1.selectedIndex;
region=parseInt(document.Form1.txtregion1[si].value);
var op=0;
document.Form1.txtregion2.length=0;
document.Form1.txtregion2.disabled=0;
switch(region){
case 0:
optregion(2,'Selecciona una Localidad','0');
break;
case 25:
optregion(2,'Agronomia','366','Almagro','367','Balvanera','369','Barracas','370','Barrio Norte','368','Belgrano','371','Boedo','372','Caballito','373','Chacarita','374','Coghlan','375','Colegiales','376','Constitucion','377','Flores','378','Floresta','379','La Boca','380','Liniers','381','Mataderos','382','Monserrat','383','Monte Castro','384','Nueva Pompeya','385','Nuñez','386','Otra ubicación - Cap. Fed.','1','Palermo','387','Parque Avellaneda','388','Parque Chacabuco','389','Parque Patricios','390','Paternal','391','Recoleta','392','Retiro','393','Saavedra','394','San Cristobal','395','San Nicolas','396','San Telmo','397','Velez Sarfield','398','Versalles','399','Villa Crespo','400','Villa Del Parque','1511','Villa Devoto','1500','Villa Gral. Mitre','1501','Villa Lugano','1502','Villa Luro','1503','Villa Ortuzar','1504','Villa Pueyrredon','1505','Villa Real','1506','Villa Riachuelo','1507','Villa Santa Rita','1508','Villa Soldati','1509','Villa Urquiza','1510','Zona Portuaria','1512');
break;
case 1:
optregion(2,'9 de Abril','2','Acassuso','3','Adolfo Sordeaux','4','Adrogué','5','Aldo Bonzi','6','Avellaneda','7','Banfield','8','Beccar','9','Bella Vista','10','Berazategui','11','Bernal','12','Bosques','13','Boulogne','14','Burzaco','15','Canning','16','Cañuelas','17','Carapachay','18','Carlos Spegazzini','19','Caseros','20','Castelar','21','Ciudad Evita','23','Ciudadela','24','Claypole','25','Del Viso','26','Dock Sud','27','Don Torcuato','28','El Palomar','29','El Retiro (La Plata)','30','Escobar','31','Ezeiza','32','Ezpeleta','33','Florencio Varela','34','Florida','35','Garin','36','Gerli','37','Glew','38','Gonzalez Catán','40','Gral. Las Heras','41','Gral. Pacheco','42','Gral. Rodriguez','43','Grand Bourg','44','Guernica','45','Haedo','46','Hudson','47','Hurlingham','48','Ingeniero Budge','49','Ingeniero Maschwitz','50','Isidro Casanova','51','Ituzaingo','52','José C. Paz','53','José León Suarez','54','José Marmol','55','Juan M. Gutierrez','56','La Lucila','57','La Reja','58','Laferrere','59','Lanús','60','Libertad','61','Llavallol','62','Loma Hermosa','63','Lomas de Zamora','64','Lomas del Mirador','65','Longchamps','66','Los Polvorines','67','Luis Guillón','68','Maquinista Savio','69','Marcos Paz','70','Martín Coronado','71','Martinez','72','Máximo Paz','73','Merlo','75','Monte Chingolo','76','Monte Grande','77','Moreno','74','Morón','78','Muñiz','79','Munro','80','Olivos','81','Pablo Nogues','82','Paso del Rey','83','Pilar','84','Pontevedra','85','Pres. Derqui','86','Quilmes','87','R. De Escalada','88','Rafael Calzada','89','Rafael Castillo','90','Ramos Mejía','91','Ranelagh','92','Saenz Peña','93','San A. De Padua','94','San Andrés','95','San Fco. Solano','96','San Fernando','97','San Isidro','98','San Justo','99','San Martín','100','San Miguel','101','San Vicente','102','Santos Lugares','103','Sarandí','104','Tablada','105','Tapiales','106','Temperley','107','Tigre','108','Tortuguitas','110','Turdera','111','Valentín Alsina','112','Vicente Lopez','113','Victoria','114','Villa Adelina','115','Villa Ballester','116','Villa Bosch','117','Villa Celina','118','Villa Dominico','119','Villa Giambruno','121','Villa Insuperable','122','Villa Lynch','123','Villa Madero','124','Villa Martelli','125','Villa Tesei','126','Virreyes','127','Wilde','128');
break;
..... ETC.
case 24:
optregion(2,'Banda del Rio Sali','362','Concepción','361','Monteros','363','S.M. De Tucumán','360','Yerba Buena','364');
break;
}
}

}
... En el select ponen onChange="javascript:SelectRegion(2)" ... que si buscamos la función.. tienen:
Código:
//Cargo las regiones
//Recupero la seleccion del usuario
   SelectRegion(1);

   for (var k = 0; k < (Form1.txtregion1.length)-1; k++){
      if (Form1.txtregion1.options[k].value==15)
         {Form1.txtregion1.selectedIndex=k};}

   SelectRegion(2);

   for (var k = 0; k < (Form1.txtregion2.length); k++){
      if (Form1.txtregion2.options[k].value==321)
         {Form1.txtregion2.selectedIndex=k};}
.... y dirás ¿y esto qué hace??? ... pués te contesto: "Ojalá alguien nos explique" ... Practicamente no sé nada de JavaScript... definitivamente no alcanzo a verlo bien.... Tienen un primer arreglo donde esta el value antecediendo a las opciones que se imprimen en la primera lista... posteriormente un switch donde valoran esto y despliegan las subcategorias de la misma forma.. ¿pero dónde y cuándo imprimen esto en pantalla??...

Como sea... Mira, el onChange del ejemplo que manejas (la FAQ) no te afecta en nada los valores que te imprime al cargarse la página... por lo mismo tu puedes darselos... recoje la variable de la URL e imprime los options correspondientes con los respectivos "selected" en su lugar correcto, todo esto con PHP/ASP... más que complicado es laborioso... por eso solo puedo darte la idea ... No me queda más que decearte mucha suerte...

Edito: Disculpa por pedirte el código.... no recordaba ni sabia pondrias exactamente lo mismo de la FAQ#1... .
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 20/03/2005 a las 03:44
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:30.