Foros del Web » Programando para Internet » Javascript »

Cambio de propiedad de lista

Estas en el tema de Cambio de propiedad de lista en el foro de Javascript en Foros del Web. Hola a todos/as: Estoy intentando realizar un menú de pestañas al estilo de los navegadores y me ha surgido un problema con la propiedad "current" ...
  #1 (permalink)  
Antiguo 03/05/2011, 00:18
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Cambio de propiedad de lista

Hola a todos/as:

Estoy intentando realizar un menú de pestañas al estilo de los navegadores y me ha surgido un problema con la propiedad "current" de las listas.
Me explico, en la lista desordenada que utilizo para confeccionar el menú hay la propiedad current es la que hace que la pestaña correspondiente al enlace se quede fija. Tal como está pensada originalmente esta propiedad, cuando pinchas el enlace correspondiente regargas toda la página con el contenido de otra en la que está repetido el html de la lista de enlaces con el current puesto en la página que ha sido cargada. Por ejemplo cuando pinchas el enlace a la "página 2" desde la "pagina 1" la propiedad current se asigna al enlace correspondiente a "pagina 2" en la lista desordenada que carga la página 2.
Lo que deseo es que esa propiedad se desplace "dinámicamente" en función del enlace que pincho.
La cosa podría ser más o menos así (sin saber JAVASCRIPT):

Código PHP:
<HTML
<
HEAD
   <
TITLE></TITLE
<
SCRIPT

function 
cambiar_estado (){ 
   
Código javascript de la función que cambiaria la propiedad "class="current"" de lugar al pinchar el enlace correspondiente
 


</SCRIPT> 
</HEAD> 
<BODY>

<div id="Pestanas">
    <ul>
        <li <SCRIPT> cambiar_estado () </SCRIPT> ><a href="#" rel="1" class="button">Perfil</a></li>
        <li <SCRIPT> cambiar_estado () </SCRIPT> ><a href="#" rel="2" class="button">Referencias</a></li>
        <li <SCRIPT> cambiar_estado () </SCRIPT> ><a href="#" rel="3" class="button">Documentos</a></li>
        
    </ul>
</div>
</BODY> 
</HTML> 
Est es el código con el que estoy haciendo las pruebas,
Gracias por la ayuda
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #2 (permalink)  
Antiguo 03/05/2011, 02:13
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Cambio de propiedad de lista

Tema cerrado. Resulto con la pseudo clase focus.

Gracias y disculpad por haceros perder el tiempo
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #3 (permalink)  
Antiguo 03/05/2011, 02:26
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Cambio de propiedad de lista

Tema cerrado. Resulto con la pseudo clase focus.

Gracias y disculpad por haceros perder el tiempo
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #4 (permalink)  
Antiguo 03/05/2011, 05:45
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Cambio de propiedad de lista

para que no haya malos entendidos en futuras lecturas, current no es una propiedad. es un selector css que has creado, el cual tendrás las propiedades que tú le hayas dado. con respecto a :focus, el problema es que no es persistente, es decir, si clikeas en cualquier otra parte de la página, el elemento pierde la propiedad. la pseudo-clase :target sí es persistente. el problema es que ie no la acepta
  #5 (permalink)  
Antiguo 04/05/2011, 02:15
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Cambio de propiedad de lista

Muchas gracias IsabelM:

Por lo que comentas veo que no tengo más remedio que resolver el tema como lo planteaba inicialmente, con un javascript.
¿Tienes idea de como podría hacerse?
Por cierto, he probado a sustituir FOCUS por TARGET y Target no es persistente (supongo que se escribe asi: #Pestanas a:focus {...})

Se agradece muchísimo tu ayuda
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #6 (permalink)  
Antiguo 04/05/2011, 07:03
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Cambio de propiedad de lista

target si es persistente, sólo has de ejecutar los ejemplos de la liga que te dejé. verás que una vez que has cliackeado en alguna de las opción, no pierde el "foco" hasta que clickeas en otra opción

siguiendo con el tema principal. se me ocurre que puedes usar event y arreglo al tipo de evento que ocurra (mouseover, mouseout, click), cambias el class de cada opción (this.className)
  #7 (permalink)  
Antiguo 04/05/2011, 22:49
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Cambio de propiedad de lista

Hola IsabelM:

Buenos dias. Muchas gracias por contestar. He seguido el enlace que me indicas en tu mensaje y, en el ejemplo que sale, target pierde el estado "enfocado" de la pestaña si pinchas fuera de él.
Pero volviendo al tema principal, he de confesar mis limitaciones (limitaciones=ignorancia supina) con javascript ¿Podrías ser algo más explícita en tus amables y útiles indicaciones? ¿Tienes algún ejemplo que me pueda servir?
¿please? ¿please? ¿please?

Muchas gracias por tu infinita paciencia
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #8 (permalink)  
Antiguo 04/05/2011, 23:07
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Cambio de propiedad de lista

Hola:

Tratándose de pestañas, tal vez te sirva esta página: Sistema de pestañas... y accesible.

Por cierto, en tu código veo que usas el atributo "rel" de los enlaces, pero no parece que lo estés usando correctamente

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #9 (permalink)  
Antiguo 05/05/2011, 02:37
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Cambio de propiedad de lista

Hola Caricatos:

Muchas gracias por tu aportación. He ido a tu enlace donde se ven las pestañas y al obtener el código del tipo colores, el código obtenido no es funcional. Te pongo lo que he sacado mediante copy.
Código HTML:
<html>
<head>
<title>
	 Sistema de Pestañas generado desde http://www.caricatos.net/sistemaPestanas.
 Pestaña del tipo: coloreadas
</title>
<script src='pestas.js' type='text/javascript' charset='ISO-8859-1'></script>
<link rel='stylesheet' type='text/css' href='pestas.css' charset='ISO-8859-1'/>
<script type='text/javascript' charset='ISO-8859-1' >
var pestas = {
	on: 'si',
	off: 'no',
	items: ['pesta0', 'pesta1', 'pesta2']
}
window.onload = function() {inicializaPestañas(pestas, 'pesta0')};
</script >
<style type='text/css' charset='ISO-8859-1' >
#Ppesta0, #pesta0 {background-color: yellow;}
#Ppesta1, #pesta1 {background-color: pink;}
#Ppesta2, #pesta2 {background-color: yellow;}
</style >
</head>
<body>
<div id='pestas' >
<span id='Ppesta0' class='pestaña si' ><a href='#pesta0' id='_pesta0' >item color 1</a></span>
<span id='Ppesta1' class='pestaña no' ><a href='#pesta1' id='_pesta1' >item color 2</a></span>
<span id='Ppesta2' class='pestaña no' ><a href='#pesta2' id='_pesta2' >item color 3</a></span>
<div id='pesta0' class='carpeta' style='display: block'>item color 1</div>
<div id='pesta1' class='carpeta' style='display: block'>item color 2</div>
<div id='pesta2' class='carpeta' style='display: block'>item color 3</div>
</div>
</body>
</html> 
Con respecto de tu duda sobre mi código, esta lista de enlaces está relacionada con un fichero AJAX para poder actualizar mediante un switch el contenido de un div en el que está puesto el menú que estoy terminando.
Lo que me interesa más es ver como haces en tu ejemplo para cambiar el "foco" y, que mientras esa pestaña está seleccionada aunque pinches fuera (mientras no sea otro enlace o menú) se mantenga pulsada y activa.
Ahora tal como lo tengo, si pincho fuera del form, el contenido del DIV se mantiene en la selección, sin embargo, se pierde el "estado" o "foco" de la pestaña, en otras palabras pierde el aspecto de ficha clásica (anterior a los ordenadores, cuando las fichas existían físicamente).
Si quieres, te puedo pasar TODO el código del sistema para que lo veas y se entienda mejor.

Muchas gracias por la ayuda recibida y muchísimas más por la futura
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #10 (permalink)  
Antiguo 05/05/2011, 04:57
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Cambio de propiedad de lista

Cita:
Iniciado por Rankxerox1984 Ver Mensaje
Hola IsabelM:

Buenos dias. Muchas gracias por contestar. He seguido el enlace que me indicas en tu mensaje y, en el ejemplo que sale, target pierde el estado "enfocado" de la pestaña si pinchas fuera de él.
Pero volviendo al tema principal, he de confesar mis limitaciones (limitaciones=ignorancia supina) con javascript ¿Podrías ser algo más explícita en tus amables y útiles indicaciones? ¿Tienes algún ejemplo que me pueda servir?
¿please? ¿please? ¿please?

Muchas gracias por tu infinita paciencia
no lo pierde, el problema seguramente es que estás usando ie y como que te comenté en primer post, no acepta esta pseudo-clase. pruebalo con otro navegador.

a esto me refería
Cita:
<!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" dir="ltr" lang="es">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css">
#contenedor {background:#FFF;width:200px; height:150px;}
#tabs{position:relative; top:2px; left:5px; width:195px; z-index:1;}
#tabs div{display:inline;}
.ocultar {display:none;}
.mostrar {display:block;}
.sel {background:#FFF; color:#808080; font:bold 11px Verdena; border-width: thin thin 2px thin; border-color: #A9A9A9 #A9A9A9 #FFF #A9A9A9; border-style: solid;}
.nosel {background:#DCDCDC; color:#A9A9A9; font: 11px Verdena; border: solid #A9A9A9; border-width: 1px 1px 1px 1px; cursor:pointer;}
.fecha{background:#FFF; border-width: thin thin thin thin; border-color: #A9A9A9 #A9A9A9 #DCDCDC #A9A9A9; border-style: solid; font:8px Verdena; color:#C0C0C0;}
.texto{background:#FFF;border: solid #A9A9A9; border-width:0px 1px 0px 1px; font:bold 11px Verdena; color:#696969;}
.paginador{background:white; border: solid #A9A9A9; border-width:0px 1px 1px 1px; font:bold 11px Verdena;}
.enunciado{font:11px Verdena;}
</style>
<script type="text/javascript">
var visto_subm = null;
var visto_color = null;
function ver(val) {
objhl = document.getElementById(val);
obj = document.getElementById(val + '_menu');

obj.className = (obj==visto_subm) ? 'ocultar' : 'mostar';
objhl.className = (objhl==visto_color) ? 'nosel' : 'sel';

if ((visto_subm != null) && (visto_color != null)) {
visto_subm.className = 'ocultar';
visto_color.className = 'nosel';
}
visto_subm = (obj==visto_subm) ? null : obj;
visto_color = (obj==visto_color) ? null : objhl;
}

window.onload = function() {ver('p1');};
</script>
</head>
<body>
<div id="contenedor">
<div id="tabs">
<div id="p1" onclick="ver(this.id);" class="nosel">Enero</div>
<div id="p2" onclick="ver(this.id);" class="nosel">Febrero</div>
<div id="p3" onclick="ver(this.id);" class="nosel">Abril</div>
</div>

<div id="p1_menu" class="ocultar">
<div class="fecha">Fecha: 12/01/2009 23:12:00 Actualizada: 12/01/2009 23:12:00</div><div class="texto">Un elefante se banlanceaba</div>
</div>

<div id="p2_menu" class="ocultar">
<div class="fecha">Fecha: 02/02/2009 15:32:17 Actualizada: 27/02/2009 21:09:12</div><div class="texto">Supercalifragilitico</div>
</div>

<div id="p3_menu" class="ocultar">
<div class="fecha">Fecha: 24/04/2010 3:32:54 Actualizada: 24/04/2010 3:52:00</div><div class="texto">Un hombre muerde a un perro</div>
</div>


</div>
</body>
</html>
  #11 (permalink)  
Antiguo 06/05/2011, 15:29
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Cambio de propiedad de lista

Hola IsabelM:

Muchísimas gracias.
GLUUPS!!
Estoy digeriendo el código y tratando de entender como funciona para adaptarlo a mis necesidades (Si pudieras darme alguna explicación adicional sería la bomba).
En cualquier caso muchísmas gracias de nuevo
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #12 (permalink)  
Antiguo 06/05/2011, 16:01
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Cambio de propiedad de lista

el único css que necesitas es este
Cita:
.ocultar {display:none;}
.mostrar {display:block;}
.sel {background:#FFF; color:#808080; font:bold 11px Verdena; border-width: thin thin 2px thin; border-color: #A9A9A9 #A9A9A9 #FFF #A9A9A9; border-style: solid;}
.nosel {background:#DCDCDC; color:#A9A9A9; font: 11px Verdena; border: solid #A9A9A9; border-width: 1px 1px 1px 1px; cursor:pointer;}
el resto es para un paginador que tiene cada tab
Cita:
var visto_subm = null;
var visto_color = null;
function ver(val) {
objhl = document.getElementById(val); // el tab seleccionado
obj = document.getElementById(val + '_menu'); // contenido del tab

obj.className = (obj==visto_subm) ? 'ocultar' : 'mostar'; // condicional para mostrar el contenido del tab seleccionado
objhl.className = (objhl==visto_color) ? 'nosel' : 'sel'; // condicional para marcar el tab seleccionado

if ((visto_subm != null) && (visto_color != null)) { // condicional para deseleccionar y ocultar el tab y el contenido del tab que fue seleccionado antes de la última selección
visto_subm.className = 'ocultar';
visto_color.className = 'nosel';
}
// se cambia el valor de las variables para saber que tab hay que deseleccionar. estas variables se usan en las anteriores condicionales
visto_subm = (obj==visto_subm) ? null : obj;
visto_color = (obj==visto_color) ? null : objhl;
}

window.onload = function() {ver('p1');}; // cuando se carga la página selecciona y muestra el contenido del primer tab
  #13 (permalink)  
Antiguo 09/05/2011, 00:18
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Cambio de propiedad de lista

Hola JuanaM:

Buenos dias. Tu código no me deja modificarlo para adaptarlo a mi proyecto. Te explico lo que tenía antes a ver si puedes iluminar mi camino.
En la página, en el head, tengo un include que llama a este AJAX:
Código:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
   <script>
	   $(function(){
		   $(".button").click(function(){
			   $('#resultado').html("Cargando...");
			   var valor=$(this).attr("rel");
			   $.ajax({
			   url: '../phpBits/BotonesMenuPER.php',
			   data: 'boton='+valor,
			   type: 'POST',
			   success: function(data){
				   $('#contenido').html(data);
				   }
			   });
		   });
	   });
	   
   </script>
Que le pasa los valores de estos enlaces:

Código HTML:
<div id="Pestanas">
	<ul>
		<li ><a href="#" rel="1" class="button">Perfil</a></li>
		<li ><a href="#" rel="2" class="button">Referencias</a></li>
		<li ><a href="#" rel="3" class="button">Documentos</a></li>
	
	</ul>
	
</div> 
a este fichero:

Código PHP:
<?php session_start ();
    
$boton=$_POST['boton'];               
    
    
//Cambio el contenido del DIV con los botones del menu
                                                 
                            
switch ($boton){ 
                                case 
"1":
                                    include (
"../forms/DatosPerfilConsultor.php"); 
                                break;
                                case 
"2":
                                    include (
"../forms/Body_Form_Txt_REFCon.php"); 
                                break; 
                                case 
"3":
                                    include (
"../forms/Body_Form_Txt_RGTUSERCon.php"); 
                                break; 
                                default:
                                    include (
"../forms/DatosPerfilConsultor.php"); 
                            }
                     
    
?>
Que es el que carga los contenidos del div correspondiente en la página y se combina con este CSS:

Código:
/*Menus de pestaña*/ 
	
			#Pestanas{float:left;z-index:1;margin-left: 4px;width: 100%;padding-left: 5px;z-index:1}
			#Pestanas ul{font: bold 11px Arial, Verdana, sans-serif;margin:0;padding:5px;list-style:none;border-radius:4px 4px 0px 0px;-moz-border-radius: 4px 4px 0px 0px;-webkit-border-radius:4px 4px 0px 0px;}
			#Pestanas a{float:left;color: white;background-color: FireBrick;border:2px Solid #8b0000;margin-left: 4px;padding:5px;text-decoration:none;letter-spacing: 1px;border-radius:4px 4px 0px 0px;-moz-border-radius: 4px 4px 0px 0px;-webkit-border-radius:4px 4px 0px 0px;}
			.button {display:inline;line-height: 1.5em;margin:0 0 0 0;padding:7px; border-radius:4px 4px 0px 0px;-moz-border-radius: 4px 4px 0px 0px;-webkit-border-radius:4px 4px 0px 0px;}
			#Pestanas li a:hover{background-color: #d50509;border:2px Solid #8b0000;}
			#Pestanas li a:focus {background:#e9e9e9;border:2px Solid #8b0000;text-decoration: none; color:FireBrick; border-bottom:2px Solid#e9e9e9;}
			#Pestanas li a:active{background:#e9e9e9;border:2px Solid #8b0000; }
			#Pestanasline{margin-top:7px;padding: 0;width: 100%;height: 2px;line-height: 1px;background: #8b0000;}
		
	/*Contenido página formularios página central*/
	
	#contenido {float:left;width: 100%;z-index:5;padding:0;margin:-2px 0 0 0; border-top:2px Solid #8b0000; border:2px Solid #8b0000;}
Esto, en general me funciona bien (no como lo que tu me has enviado) pero con mi actual nivel de conocimientos me resulta flexible para después adaptarlo al resto de mi proyecto. Sin embargo, tu código tiene cualidades como la persistencia del enlace y la carga predeterminada de la página inicial que me resultarían muy útiles para incorporarlas al mío.
¿Serías capaz de decirme como puedo unir lo mejor de ambos mundos?

Se que no me merezco tanta atención. Pero piensa que esto mejorará mucho tu Karma y en la próxima reencarnación serás un ser aún más maravilloso
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #14 (permalink)  
Antiguo 09/05/2011, 14:28
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Cambio de propiedad de lista

lo siento, no puedo ayudarte por que no sé nada de jquery
  #15 (permalink)  
Antiguo 09/05/2011, 22:32
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Cambio de propiedad de lista

...Oooohhh...

Que lástima. Intentaré superar este golpe del destino...
¡¡¡Muchas gracias de todos modos por tu ayuda!!!
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)

Etiquetas: lista, propiedad, cambios
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 00:04.