Foros del Web » Programando para Internet » Javascript »

No mostrar

Estas en el tema de No mostrar en el foro de Javascript en Foros del Web. Pues resulta q tengo hecho un combobox (d los q dependiendo d las opciones elegidas en "A" t muestra unas determinadas opciones en "B"). Está ...
  #1 (permalink)  
Antiguo 19/07/2008, 09:36
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 1
No mostrar

Pues resulta q tengo hecho un combobox (d los q dependiendo d las opciones elegidas en "A" t muestra unas determinadas opciones en "B"). Está hecho en java y PHP, pero es la parte de java la q tengo q modificar.
Lo q necesito es q en las ocasiones en las q "A" no tiene ninguna correspondencia en "B" no m muestre la "celdilla" de las opciones en "B"
O sea, tengo una serie de localidades ('loc') a las q corresponden una serie de zonas ('zona') y en ciertas ocasiones la localidad no tiene ninguna sublocalidad o 'zona'. Es en ese caso cuando necesito q no la muestre.

Por otro lado, el campo d formulario 'zona' DEBE d seguir pasando la variable 'zona' aunque esté vacío, pues sino el formulario no funciona (está preparado para recibir la variable zona a través d la URL, y si al no mostrar el campo 'zona' no pasa su variable, no funcionará)

Estaría infinitamente agradecido a cualquiera q pudiese ayudarme, es imprescindible q lo haga o probablemente m echen a la p. calle :( (a mis jefes se les ha acabado la paciencia) Les dejo aquí el código


Cita:
<script language="JavaScript">
<!--

function addOpt(oCntrl, iPos, sTxt, sVal){
var selOpcion=new Option(sTxt, sVal);
eval(oCntrl.options[iPos]=selOpcion);
}
function cambiar(oCntrl){
while (oCntrl.length) oCntrl.remove(0);
switch (document.frm.loc.selectedIndex){

case 0:
addOpt(oCntrl, 0, "", "%%");
break;
case 1:
addOpt(oCntrl, 0, "Cualquier ubicación", "%%");
addOpt(oCntrl, 1, "Puerto de las Nieves", "(Puerto de Las Nieves)");
addOpt(oCntrl, 2, "Valle de Agaete", "(Valle de Agaete)");
break;
case 2:
addOpt(oCntrl, 0, "Cualquier ubicación", "%%");
addOpt(oCntrl, 1, "Villa de Agüimes", "(Villa de Agüimes)");
addOpt(oCntrl, 2, "Cruce de Arinaga", "(Cruce de Arinaga)");
addOpt(oCntrl, 3, "Playa de Arinaga", "(Playa de Arinaga)");
addOpt(oCntrl, 4, "Polígono industrial de Arinaga", "(Polígono industrial de Arinaga)");
break;
}
}
//-->
</script>
Siento haber puesto el código dentro d [QUOTE] pero no sé qué etiqueta debía d usar para java y pensé q esta sería la más clara para verla.
He puesto sólo una parte, pues poner el resto d las opciones del menú hubiese sido una tontería, pues el resto son todas igual q las expuestas.
El mayor problema es aquí:
case 0:
addOpt(oCntrl, 0, "", "%%");
break;
Espero vuestra ayuda, miles d gracias a tod@s
Salu2!
  #2 (permalink)  
Antiguo 19/07/2008, 12:29
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
Respuesta: No mostrar

Hola pcadict0:

He hecho un ejemplo en el que el segundo select se mantiene no visible hasta que seleccionamos una option en el primer select que tiene zonas disponibles.

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<
head>
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<
meta name="Author" content="derkeNuke" />
<
title>Página nueva</title>
<
style type="text/css">

</
style>
</
head>

<
body>



<
form name="frm" method="GET" action="">
    <
select name="loc" onchange="cambiar(this.form.zona)">
        <
option>loc1</option>
        <
option>loc2</option>
        <
option>loc3</option>
    </
select>
    <
select name="zona" style="visibility: hidden;">    
    </
select>
</
form>



<
script type="text/javascript">
<!--


function 
addOpt(oCntrliPossTxtsVal){
    var 
selOpcion=new Option(sTxtsVal);
    eval(
oCntrl.options[iPos]=selOpcion);
}
function 
cambiar(oCntrl){
    while (
oCntrl.lengthoCntrl.remove(0);
    
oCntrl.style.visibility="visible";
    switch (
document.frm.loc.selectedIndex){
        case 
0:
        
oCntrl.style.visibility="hidden";
        break;
        case 
1:
        
addOpt(oCntrl0"Cualquier ubicación""%%");
        
addOpt(oCntrl1"Puerto de las Nieves""(Puerto de Las Nieves)");
        
addOpt(oCntrl2"Valle de Agaete""(Valle de Agaete)");
        break;
        case 
2:
        
addOpt(oCntrl0"Cualquier ubicación""%%");
        
addOpt(oCntrl1"Villa de Agüimes""(Villa de Agüimes)");
        
addOpt(oCntrl2"Cruce de Arinaga""(Cruce de Arinaga)");
        
addOpt(oCntrl3"Playa de Arinaga""(Playa de Arinaga)");
        
addOpt(oCntrl4"Polígono industrial de Arinaga""(Polígono industrial de Arinaga)");
        break;
    }
}



// -->
</script>

</body>
</html> 

Para los códigos puedes usar la etiqueta [ code ], yo suelo utilizar [ PHP ] porque colorea la sintaxis y ayuda a leer.

Sé generoso en la descripción de tu problema en el título del post, que para eso hay caracteres de sobra. "No mostrar" no define demasiado tu cuestión. Algo así como "selects dependientes: Sólo mostrar el segundo si es necesario" estaría mucho mejor, ayudaría a encontrar usuarios que respondan y será más fácil de localizar el post en el futuro.

Otro consejo es postear códigos completos que se puedan probar (como el que te posteo, (x)HTML+javascript), así encontrarás ayuda más rápida y cómoda.


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 19/07/2008, 17:42
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 1
Respuesta: No mostrar

Darkenuke, eres el mejor
No sé q haría sin vuestra ayuda, y la verdad es q no puedo agradecéroslo con palabras. Es maravilloso q haya gente como vosotros dispuesta a ayudar a "patosillos" como yo a cambio d simplemente unas "gracias" escritas.

He d decirte q no he probado el código pero estoy convencido d q funcionará

Lo primero es lo primero, y como dice el refrán "es d bien nacidos ser agradecidos" así q luego d postear este mensaje iré sobre la marcha a probarlo.

Disculpa por lo del título, tienes razón, es muy poco explicativo. Pensaba poner "ocultar select" u "ocultar opción" pero tampoco m convencían del todo. Y sí, es verdad, es mucho más sencillo poner ejemplos q se puedan probar. Lo haré siempre así a partir d ahora.
¡¡Infinitas gracias nuevamente, un saludo!!
  #4 (permalink)  
Antiguo 19/07/2008, 22:10
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
Respuesta: No mostrar

De nada, para eso estamos
__________________
- 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 20/07/2008, 10:28
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 1
Respuesta: No mostrar

Hola derkenuke!!!!

Tú código funciona d maravilla, oculta el campo "zona" cuando no debe d mostrarlo. Pero desafortunadamente no pasa el valor del campo "zona" por la URL cuando este campo está oculto.

He "peinado" toda la red en busca d algo parecido pero no ha habido suerte
He probado a poner variables d URL, pero no tiene demasiado sentido pues al hacer un evento "onchange" no pasa nada por la URL hasta q no se ha enviado el formulario. Por ello he incluso buscado la manera d hacer q al apretar el botón se envíe 2 veces (aunque quede muy cutre) para q una vez enviada la primera vez tome el valor d la URL y muestre el campo zona como es debido.
He probado también a poner un campo oculto llamado "zona", para q cuando el campo de igual nombre ("zona") esté oculto pues lo mande igual. Pero así no funciona la función d javascript, al haber una "zona" como campo oculto y otro como menú de lista.
He intentado todo lo q estaba a mi alcance (q desgraciadamente no es mucho) para hacer q pase el valor del campo zona cuando éste no existe y sea enviado. Pero no sé más.

he puesto el código tuyo en un ejemplo q funciona (tal y como m pediste ;) por si tuvieses ocasión d mirártelo. Seguro q podrías dar con alguna solución.
Si bien, aunque no contestes, t estaré igualmente enormemente agradecido x todo lo q has hecho ya por mi.

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> 
<head> 
<meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" /> 
<meta name="Author" content="derkeNuke" /> 
<title>Página nueva</title> 
<style type="text/css"> 

</style> 
</head> 

<body> 



               <form name="frm" method="GET" action="/prueba_combobox.php">
               <select name="loc" onchange="cambiar(this.form.zona)">
                <option value="%%" <?php if (!(strcmp("%%"$_GET['loc']))) {echo "selected=\"selected\"";} ?>>Cualquier ubicación</option>
                 <option value="Agaete" <?php if (!(strcmp("Agaete"$_GET['loc']))) {echo "selected=\"selected\"";} ?>>Agaete</option>
                 <option value="Aguimes" <?php if (!(strcmp("Aguimes"$_GET['loc']))) {echo "selected=\"selected\"";} ?>>Aguimes</option>
               </select>

               <?php if($_GET['loc'] == 'Agaete') { ?>
               <select name="zona" style="visibility: visible;"> 
               <option value="%%" <?php if (!(strcmp("%%"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Cualquier ubicación</option>
               <option value="(Puerto de Las Nieves)" <?php if (!(strcmp("(Puerto de Las Nieves)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Puerto de Las Nieves</option>
               <option value="(Valle de Agaete)" <?php if (!(strcmp("(Valle de Agaete)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Valle de Agaete</option>
               </select> 
               <?php ?>    
               
               <?php if($_GET['loc'] == 'Aguimes') { ?>
               <select name="zona" style="visibility: visible;"> 
               <option value="%%" <?php if (!(strcmp("%%"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Cualquier ubicación</option>
               <option value="(Villa de Agüimes)" <?php if (!(strcmp("(Villa de Agüimes)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Villa de Agüimes</option>
               <option value="(Cruce de Arinaga)" <?php if (!(strcmp("(Cruce de Arinaga)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Cruce de Arinaga</option>
               <option value="(Playa de Arinaga)" <?php if (!(strcmp("(Playa de Arinaga)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Playa de Arinaga</option>                       
               <option value="(Polígono industrial de Arinaga)" <?php if (!(strcmp("(Polígono industrial de Arinaga)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Polígono industrial de Arinaga</option>      
               </select> 
               <?php ?>    
               
               <?php if($_GET['loc'] == '%%') { ?>
               <select name="zona" style="visibility: hidden;"> 
               <option value="%%" <?php if (!(strcmp("%%"$_GET['zona']))) {echo "selected=\"selected\"";} ?>></option>
               </select> 
               <?php ?>                   
               
               <label></label>
               <input type="submit" name="Submit" value="Enviar" />
               </form> 


<script type="text/javascript"> 

<!-- 


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

function cambiar(oCntrl){ 
    while (oCntrl.length) oCntrl.remove(0); 
    oCntrl.style.visibility="visible"; 
    switch (document.frm.loc.selectedIndex){ 
        case 0: 
        addOpt((oCntrl.style.visibility="hidden")== 0, "","%%"); 
        break; 
        case 1: 
        addOpt(oCntrl, 0, "Cualquier ubicación", "%%"); 
        addOpt(oCntrl, 1, "Puerto de Las Nieves", "(Puerto de Las Nieves)"); 
        addOpt(oCntrl, 2, "Valle de Agaete", "(Valle de Agaete)"); 
        break; 
        case 2: 
        addOpt(oCntrl, 0, "Cualquier ubicación", "%%"); 
        addOpt(oCntrl, 1, "Villa de Agüimes", "(Villa de Agüimes)"); 
        addOpt(oCntrl, 2, "Cruce de Arinaga", "(Cruce de Arinaga)"); 
        addOpt(oCntrl, 3, "Playa de Arinaga", "(Playa de Arinaga)"); 
        addOpt(oCntrl, 4, "Polígono industrial de Arinaga", "(Polígono industrial de Arinaga)"); 
        break; 
    } 




// --> 
</script>
</body> 
</html>
¡Un millón d gracias otra vez; Salu2!!!
  #6 (permalink)  
Antiguo 20/07/2008, 18:26
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 1
Respuesta: No mostrar

Solucionado!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Nuevamente gracias a tod@s (y en especial a derkenuke, sin cuya colaboración jamás podría haber llegado a resolverlo) por vuestra desinteresada ayuda.

Les dejo aquí el código en una página q funciona. Si quieren más datos sobre la tabla o cualquier cosa, posteen y encantado se los comentaré (a ver si aunque sea x una vez soy yo quién resuelve las dudas d otro y lo ayuda )

Código PHP:
<?php virtual('/Connections/base.php'); ?>
<?php
$colnamel_sin_zona 
"1";
if (isset(
$_GET['loc'] )) {
  
$colnamel_sin_zona = (get_magic_quotes_gpc()) ? $_GET['loc']  : addslashes($_GET['loc'] );
}
$colnamebg_sin_zona "1";
if (isset(
$_GET['bg'])) {
  
$colnamebg_sin_zona = (get_magic_quotes_gpc()) ? $_GET['bg'] : addslashes($_GET['bg']);
}
mysql_select_db($database_base$base);
$query_sin_zona sprintf("SELECT * FROM clientes WHERE info like '%%%s%%' AND localidad like '%%%s%%' "$colnamebg_sin_zona,$colnamel_sin_zona);
$sin_zona mysql_query($query_sin_zona$base) or die(mysql_error());
$row_sin_zona mysql_fetch_assoc($sin_zona);
$totalRows_sin_zona mysql_num_rows($sin_zona);

$colnamez_con_zona "1";
if (isset(
$_GET['zona']                              )) {
  
$colnamez_con_zona = (get_magic_quotes_gpc()) ? $_GET['zona']                               : addslashes($_GET['zona']                              );
}
$colnamel_con_zona "1";
if (isset(
$_GET['loc']    )) {
  
$colnamel_con_zona = (get_magic_quotes_gpc()) ? $_GET['loc']     : addslashes($_GET['loc']    );
}
$colnamebg_con_zona "1";
if (isset(
$_GET['bg'])) {
  
$colnamebg_con_zona = (get_magic_quotes_gpc()) ? $_GET['bg'] : addslashes($_GET['bg']);
}
mysql_select_db($database_base$base);
$query_con_zona sprintf("SELECT * FROM clientes WHERE info like '%%%s%%' AND localidad like '%%%s%%' AND zona like '%%%s%%'"$colnamebg_con_zona,$colnamel_con_zona,$colnamez_con_zona);
$con_zona mysql_query($query_con_zona$base) or die(mysql_error());
$row_con_zona mysql_fetch_assoc($con_zona);
$totalRows_con_zona mysql_num_rows($con_zona);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> 
<head> 
<meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" /> 
<meta name="Author" content="derkeNuke y una pequena aportacion d pcadict0" /> 
<title>combobox</title> 
<style type="text/css"> 

</style> 
</head> 

<body> 



               <form name="frm" method="GET" action="/combobox_definitivo.php">
               <select name="loc" title="<?php echo $row_sin_zona['localidad']; ?>" onchange="cambiar(this.form.zona)">
                 <option value="%%" <?php if (!(strcmp("%%"$_GET['loc']))) {echo "selected=\"selected\"";} ?>>Cualquier ubicación</option>
                 <option value="Agaete" <?php if (!(strcmp("Agaete"$_GET['loc']))) {echo "selected=\"selected\"";} ?>>Agaete</option>
                 <option value="Aguimes" <?php if (!(strcmp("Aguimes"$_GET['loc']))) {echo "selected=\"selected\"";} ?>>Aguimes</option>
               </select>
               <?php if($_GET['loc'] == 'Agaete') { ?>
               <select name="zona" style="visibility: visible;"> 
               <option value="%%" <?php if (!(strcmp("%%"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Cualquier ubicación</option>
               <option value="(Puerto de Las Nieves)" <?php if (!(strcmp("(Puerto de Las Nieves)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Puerto de Las Nieves</option>
               <option value="(Valle de Agaete)" <?php if (!(strcmp("(Valle de Agaete)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Valle de Agaete</option>
               </select> 
               <?php ?>    
               
               <?php if($_GET['loc'] == 'Aguimes') { ?>
               <select name="zona" style="visibility: visible;"> 
               <option value="%%" <?php if (!(strcmp("%%"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Cualquier ubicación</option>
               <option value="(Villa de Agüimes)" <?php if (!(strcmp("(Villa de Agüimes)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Villa de Agüimes</option>
               <option value="(Cruce de Arinaga)" <?php if (!(strcmp("(Cruce de Arinaga)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Cruce de Arinaga</option>
               <option value="(Playa de Arinaga)" <?php if (!(strcmp("(Playa de Arinaga)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Playa de Arinaga</option>                       
               <option value="(Polígono industrial de Arinaga)" <?php if (!(strcmp("(Polígono industrial de Arinaga)"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Polígono industrial de Arinaga</option>                          
               </select> 
               <?php ?>    
               
               <?php if($_GET['loc'] == '%%') { ?>
               <select name="zona" style="visibility: hidden;"> 
               <option value="%%" <?php if (!(strcmp("%%"$_GET['zona']))) {echo "selected=\"selected\"";} ?>>Cualquier ubicación</option>
               </select> 
               <?php ?>    

               
               <label>
               <input name="bg" type="text" id="bg" />
               </label>
               <input type="submit" name="Submit" value="Enviar" />
</form> 


<script type="text/javascript"> 

<!-- 


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

function cambiar(oCntrl){ 
    while (oCntrl.length) oCntrl.remove(0); 
    oCntrl.style.visibility="visible"; 
    switch (document.frm.loc.selectedIndex){ 
        case 0: 
        addOpt(oCntrl.style.visibility="hidden", 0, "","AAA");  
        break; 
        case 1: 
        addOpt(oCntrl, 0, "Cualquier ubicación", "%%"); 
        addOpt(oCntrl, 1, "Puerto de las Nieves", "(Puerto de Las Nieves)"); 
        addOpt(oCntrl, 2, "Valle de Agaete", "(Valle de Agaete)"); 
        break; 
        case 2: 
        addOpt(oCntrl, 0, "Cualquier ubicación", "%%"); 
        addOpt(oCntrl, 1, "Villa de Agüimes", "(Villa de Agüimes)"); 
        addOpt(oCntrl, 2, "Cruce de Arinaga", "(Cruce de Arinaga)"); 
        addOpt(oCntrl, 3, "Playa de Arinaga", "(Playa de Arinaga)"); 
        addOpt(oCntrl, 4, "Polígono industrial de Arinaga", "(Polígono industrial de Arinaga)"); 
        break; 
    } 




// --> 
</script>
   <?php if($_GET['zona'] == '') { ?> 
<?php do { ?>
  <table width="100%" border="3" cellspacing="0" cellpadding="0">
    <tr>
      <td valign="top"><p>&nbsp;</p>
      <p></p></td>
      <td valign="top"><?php echo $row_sin_zona['localidad']; ?><?php echo $row_sin_zona['zona']; ?></td>
      <td valign="top"><?php echo $row_sin_zona['info']; ?></td>
    </tr>
  </table>
  <?php } while ($row_sin_zona mysql_fetch_assoc($sin_zona)); ?>
       <?php ?>    
       
   <?php if($_GET['zona'] != '') { ?> 
<?php do { ?>
  <table width="100%" border="3" cellspacing="0" cellpadding="0">
    <tr>
      <td valign="top"><p>&nbsp;</p>
      <p></p></td>
      <td valign="top"><?php echo $row_con_zona['localidad']; ?><?php echo $row_con_zona['zona']; ?></td>
      <td valign="top"><?php echo $row_con_zona['info']; ?></td>
    </tr>
  </table>
  <?php } while ($row_con_zona mysql_fetch_assoc($con_zona)); ?>
       <?php ?>               
       
       
                  
               <?php if($_GET['zona'] == '') { ?> 
               zona
               <?php ?>    
               
               <?php if($_GET['zona'] != '') { ?> 
               zona2
               <?php ?>                                  
                              
</p>
</body> 
  <?php
  mysql_free_result
($sin_zona);

mysql_free_result($con_zona);
  
?>  


</html>
Les paso a explicar lo más importante:
Dado q no sabía cómo hacer para q pasase el valor del campo "zona" cuando ésta no se mostraba (pues no había ninguna correspondencia del campo "loc", q es el responsable de las opciones del campo "zona"); lo q he hecho es poner 2 juegos d registros, uno para el caso d q exista un valor d URL llamado "zona"; y otro juego d registros para el otro caso: cuando no exista nada llamado "zona" en la URL. Es una solución extremadamente "cutre", pero q resuelve sin necesidad d grandes conocimientos este tipo d problemas, q seguro q otras personas también se habrán encontrado.

Gracias otra vez a tod@s x hacer d estas páginas lo q son en la actualidad.
Salu2
  #7 (permalink)  
Antiguo 20/07/2008, 18:44
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
Respuesta: No mostrar

Cita:
Iniciado por pcadict0 Ver Mensaje
desafortunadamente no pasa el valor del campo "zona" por la URL cuando este campo está oculto.
Desconocía totalmente ese defecto de Internet Explorer, en Firefox lo he probado y ha funcionado.

Lo que podemos hacer es mostrarlo momentáneamente en el momento de enviar el formulario:

Código PHP:
function muestraElOculto() {
    var 
comoEstaba document.frm.zona.style.visibility;
    
document.forms["frm"].zona.style.visibility "visible";
    
setTimeout("document.frm.zona.style.visibility='"+comoEstaba+"'"100);

Sólo tienes que incluir en tu etiqueta <form> el atributo onsubmit con la función:
Código HTML:
 onsubmit="muestraElOculto()"
Así me ha funcionado.



Por otra parte, no sé qué pretendías con esta línea:
Cita:
Iniciado por pcadict0 Ver Mensaje
addOpt((oCntrl.style.visibility="hidden")== 0, "","%%");
Pero no tiene demasiado sentido. ¿No te da error? Puedes dejarla como en mi primer ejemplo:
Código PHP:
        case 0:
        
oCntrl.style.visibility="hidden"


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.
  #8 (permalink)  
Antiguo 21/07/2008, 09:30
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 1
Respuesta: No mostrar

Hola nuevamente Derkenuke!!!!!!

Ante todo, reiterarte mi más sincero agradecimiento por todas las molestias q t has tomado, no m cansaré d repetirlo. Gracias.


Por otro lado, debo d ser muy torpe ; pues no consigo hacer funcionar tu ejemplo

Esto es lo q tengo, siguiendo los pasos dados por ti:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"
<
head
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" /> 
<
meta name="Author" content="derkeNuke" /> 
<
title>Página nueva</title
<
style type="text/css"

</
style
</
head

<
body



<
form action="nuevo_combobox.html" method="GET" name="frm"  onsubmit="muestraElOculto()"
    <
select name="loc" onchange="cambiar(this.form.zona)"
        <
option>Cualquier ubicación</option
        <
option>Agaete</option
        <
option>Agüimes</option
    </
select
    <
select name="zona" style="visibility: hidden;">     
    </
select
    <
label>
    <
input name="Submit" type="submit" onclick="muestraElOculto()" value="Enviar" />
    </
label>
</
form



<
script type="text/javascript"
<!-- 


function 
addOpt(oCntrliPossTxtsVal){ 
    var 
selOpcion=new Option(sTxtsVal); 
    eval(
oCntrl.options[iPos]=selOpcion); 

function 
cambiar(oCntrl){ 
    while (
oCntrl.lengthoCntrl.remove(0); 
    
oCntrl.style.visibility="visible"
    switch (
document.frm.loc.selectedIndex){ 
        case 
0
        
oCntrl.style.visibility="hidden"
        break; 
        case 
1
        
addOpt(oCntrl0"Cualquier ubicación""%%"); 
        
addOpt(oCntrl1"Puerto de las Nieves""(Puerto de Las Nieves)"); 
        
addOpt(oCntrl2"Valle de Agaete""(Valle de Agaete)"); 
        break; 
        case 
2
        
addOpt(oCntrl0"Cualquier ubicación""%%"); 
        
addOpt(oCntrl1"Villa de Agüimes""(Villa de Agüimes)"); 
        
addOpt(oCntrl2"Cruce de Arinaga""(Cruce de Arinaga)"); 
        
addOpt(oCntrl3"Playa de Arinaga""(Playa de Arinaga)"); 
        
addOpt(oCntrl4"Polígono industrial de Arinaga""(Polígono industrial de Arinaga)"); 
        break; 
    } 


function 
muestraElOculto() { 
    var 
comoEstaba document.frm.zona.style.visibility
    
document.forms["frm"].zona.style.visibility "visible"
    
setTimeout("document.frm.zona.style.visibility='"+comoEstaba+"'"100); 
}  

// --> 
</script> 
<script type="text/javascript"> 
<!-- 

function muestraElOculto() { 
    var comoEstaba = document.frm.zona.style.visibility; 
    document.forms["frm"].zona.style.visibility = "visible"; 
    setTimeout("document.frm.zona.style.visibility='"+comoEstaba+"'", 100); 
}  

// --> 
</script> 


</body> 
</html> 
Ciertamente, tienes toda la razón con lo d la línea esta
Código HTML:
addOpt((oCntrl.style.visibility="hidden")== 0, "","%%"); 
Es completamente ilógica y absurda. Sobra la mitad d la línea, d hecho sobra todo lo q yo le he añadido. Es el fruto d la desesperación cuando no tienes más recursos para hacerlo bien. M puse a probar y a retocar tu ejemplo a ver si conseguía q además d ocultar a la vista el campo zona pasase también su valor. Pero no funcionó y lo dejé "tal cual" mi último y frustrado intento. Al menos no da error (funciona tal y como lo hacía tu ejemplo aunque evidentemente con más caracteres sobrantes).

Nuevamente gracias infinitas
Un saludo
  #9 (permalink)  
Antiguo 21/07/2008, 15:39
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
Respuesta: No mostrar

Hola:

Dos preguntas:
¿Por qué colocas en el onclick del botón submit muestraElOculto() si ya se va a ejecutar en el onsubmit del formulario?
¿Por qué aparece dos veces definida muestraElOculto() en tu código? ¡Con una vez basta y sobra!

Prueba corrigiendo eso.

Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #10 (permalink)  
Antiguo 22/07/2008, 12:41
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 1
Respuesta: No mostrar

Hola Derkenuke!!!!!!!

Disculpa x tardar tanto en responder. Estaba probando tu código e intentando hacer cambios pero no he conseguido hacer q funcione. Esto es lo q tenía antes d cambiarlo y hacer "chapuzas" como las q nombras

Código PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>  
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">  
<
head>  
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />  
<
meta name="Author" content="derkeNuke" />  
<
title>Página nueva</title>  
<
style type="text/css">  

</
style>  
</
head>  

<
body>  



<
form action="nuevo_combobox.html" method="GET" name="frm"  onsubmit="muestraElOculto()">  
    <
select name="loc" onchange="cambiar(this.form.zona)">  
        <
option>Cualquier ubicación</option>  
        <
option>Agaete</option>  
        <
option>Agüimes</option>  
    </
select>  
    <
select name="zona" style="visibility: hidden;">      
    </
select>  
    <
label
    <
input name="Submit" type="submit" value="Enviar" /> 
    </
label
</
form>  



<
script type="text/javascript">  
<!--  


function 
addOpt(oCntrliPossTxtsVal){  
    var 
selOpcion=new Option(sTxtsVal);  
    eval(
oCntrl.options[iPos]=selOpcion);  
}  
function 
cambiar(oCntrl){  
    while (
oCntrl.lengthoCntrl.remove(0);  
    
oCntrl.style.visibility="visible";  
    switch (
document.frm.loc.selectedIndex){  
        case 
0:  
        
oCntrl.style.visibility="hidden";  
        break;  
        case 
1:  
        
addOpt(oCntrl0"Cualquier ubicación""%%");  
        
addOpt(oCntrl1"Puerto de las Nieves""(Puerto de Las Nieves)");  
        
addOpt(oCntrl2"Valle de Agaete""(Valle de Agaete)");  
        break;  
        case 
2:  
        
addOpt(oCntrl0"Cualquier ubicación""%%");  
        
addOpt(oCntrl1"Villa de Agüimes""(Villa de Agüimes)");  
        
addOpt(oCntrl2"Cruce de Arinaga""(Cruce de Arinaga)");  
        
addOpt(oCntrl3"Playa de Arinaga""(Playa de Arinaga)");  
        
addOpt(oCntrl4"Polígono industrial de Arinaga""(Polígono industrial de Arinaga)");  
        break;  
    }  
}  

// -->  
</script>  
<script type="text/javascript">  
<!--  

function muestraElOculto() {  
    var comoEstaba = document.frm.zona.style.visibility;  
    document.forms["frm"].zona.style.visibility = "visible";  
    setTimeout("document.frm.zona.style.visibility='"+comoEstaba+"'", 100);  
}   

// -->  
</script>  


</body>  
</html> 

No dudo d q tú lo hayas hecho, pero yo la verdad es q yo no consigo hacer q muestre el campo "zona" en la URL cuando está oculto.

Respecto a tus dos preguntas, la verdad es q repetí la función "muestraeloculto()" xq no conseguía hacer q con "onsubmit" lo enviase. Y lo repetí con "onclick".
Pero está visto q no causa ningún efecto, al menos en el internet explorer...

D verdad, no t preocupes más x este asunto. Aunque la solución sea extremadamente "cutre", he conseguido hacer q funcione pero no mostrándolo: o sea, poniendo dos juegos d registros, uno para cuando lo muestra y otro para cuando no. Lo malo es q se complica xq en realidad hay otro campo con categorías "cat" a las q corresponden unas subcategorías "sub" y pasa tres cuartos d lo mismo; lo q m obliga a poner no 2 sino 4 juegos d registros

Por todo ello t estoy inmensamente agradecido. Tu código m ha servido para q al menos no muestre el campo, algo q yo no habría podido conseguir. Lo d pasar el valor la verdad es q sigo sin lograrlo, pero t repito q con 4 juegos d registros a la vez se soluciona...

Si pudieras postear tu ejemplo sería una maravilla aunque tuviese q modificar las páginas ya hechas con mi cutre sistema. Aunque d veras, no t molestes más, no quiero abusar d tu admirable paciencia Si ya lo tienes hecho podrías postearlo, si no, d verdad q no t molestes. Ya has hecho muchísimo más d lo q esperaba cuando posteé este tema.

¡¡Una vez más, muchísimas gracias!! ¡Un saludo !!!!
  #11 (permalink)  
Antiguo 22/07/2008, 15:49
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
Respuesta: No mostrar

Hola de nuevo:

Me he dado cuenta que el problema no tiene nada que ver con que esté oculto o mostrado. El problema viene porque el select no tiene ningún hijo <option>, y IE lo ignora al enviarlo. La especificación sí que dice que un select debe contener uno o más hijos <option>, así que habrá que ponérselo por defecto.

Me he dado cuenta de esto al probar el ejemplo: Lo he ajustado al validador, y si se envía sin tocar los select no pasa nada, los envía correctamente; pero si cambiamos el primer select (cambiandose consecuentemente los datos del segundo) y volvemos a la primera opción 'Cualquier ubicación' en el primer select, entonces el select 'zona' queda totalmente vacío, sin <option>, y no se envía por IE.

Simplemente, añadamos un <option> vacío, con el valor que tú quieras. Luego ya el visibility o el display lo podemos controlar como queramos.

Código PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>  
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">  
<
head>  
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />  
<
meta name="Author" content="derkeNuke" />  
<
title>Página nueva</title>  
</
head>  

<
body>  



<
form action="recibidorGET.php" method="get" name="frm">  
    <
select name="loc" onchange="cambiar(this.form.zona)">  
        <
option>Cualquier ubicación</option>  
        <
option>Agaete</option>  
        <
option>Agüimes</option>  
    </
select>  
    <
select name="zona" style="visibility: hidden">
        <
option></option>
    </
select
    <
input name="Submit" type="submit" value="Enviar" /> 
</
form>  



<
script type="text/javascript">  
<!--  


function 
addOpt(oCntrliPossTxtsVal){  
    var 
selOpcion=new Option(sTxtsVal);  
    eval(
oCntrl.options[iPos]=selOpcion);  
}  
function 
cambiar(oCntrl){  
    while (
oCntrl.lengthoCntrl.remove(0);  
    
oCntrl.style.visibility="visible";  
    switch (
document.frm.loc.selectedIndex){  
        case 
0:  
        
addOpt(oCntrl0""""); 
        
oCntrl.style.visibility="hidden";  
        break;  
        case 
1:  
        
addOpt(oCntrl0"Cualquier ubicación""%%");  
        
addOpt(oCntrl1"Puerto de las Nieves""(Puerto de Las Nieves)");  
        
addOpt(oCntrl2"Valle de Agaete""(Valle de Agaete)");  
        break;  
        case 
2:  
        
addOpt(oCntrl0"Cualquier ubicación""%%");  
        
addOpt(oCntrl1"Villa de Agüimes""(Villa de Agüimes)");  
        
addOpt(oCntrl2"Cruce de Arinaga""(Cruce de Arinaga)");  
        
addOpt(oCntrl3"Playa de Arinaga""(Playa de Arinaga)");  
        
addOpt(oCntrl4"Polígono industrial de Arinaga""(Polígono industrial de Arinaga)");  
        break;  
    }  
}  


// -->  
</script>  


</body>  
</html> 
Probado en IE y en FF, funciona bien y envía todo. Y valida.



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.
  #12 (permalink)  
Antiguo 24/07/2008, 10:18
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 1
Respuesta: No mostrar

Tío, gracias, d verdad. Eres un p. genio Además d tener una paciencia sin límites

D verdad q no sé q decirte, eres el mejor; aunque hubieses dejado d responderme hace ya varios mensajes.

Perdona mi tardanza en contestar, estaba algo liadillo con otros asuntos del curro y no m había pasado x los foros.

La verdad es q tengo hecho un cacao en la página, con los 4 juegos d registros y otras cuantas "garrafadas" más q hacen q algunas páginas superen ampliamente las 2000 líneas d código...
Con tu inestimable ayuda seguro q consigo dejarlas en la mitad d líneas. Pasaré a probarlo en cuanto termine d postear

Cuando esté terminado el "medio" portal q m han encargado hacer, serás la segunda persona en saberlo (después del (... espacio reservado para insulto) d mi jefe)

¡¡¡Gracias nuevamente, no m cansaré d repetirlo, y felcidades x vuestra sensacional web!!!

¡Un saludo!!
  #13 (permalink)  
Antiguo 24/07/2008, 16:00
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
Respuesta: No mostrar

De nada, para eso estamos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 16:04.