Foros del Web » Programando para Internet » Javascript » Frameworks JS »

(Consulta) Cargar contenido una sla vez y de un solo item

Estas en el tema de (Consulta) Cargar contenido una sla vez y de un solo item en el foro de Frameworks JS en Foros del Web. Tengo las letras del abcdario o alfabeto. Al hacer click en una de ellas, me debe mostrar un listado de palabras. Cuando sucede el primer ...
  #1 (permalink)  
Antiguo 02/03/2012, 12:24
 
Fecha de Ingreso: marzo-2008
Mensajes: 1.020
Antigüedad: 16 años, 1 mes
Puntos: 21
(Consulta) Cargar contenido una sla vez y de un solo item

Tengo las letras del abcdario o alfabeto.

Al hacer click en una de ellas, me debe mostrar un listado de palabras.

Cuando sucede el primer evento click funciona adecuadamente.
Ej. click en letra a, muestra 'Asc', 'After', 'Asns'.

Aunque si luego hago click en B, me muestra las letras de A y se agregan las de B. Este comportamiento quiero evitar.

Necesito que al hacer click en A muestra letras de A, Al hacer click en B, muestre las de B.

Como aplico esta restricción?

Código HTML:
Ver original
  1. <ul class="abc">
  2.                     <li><a rel="0" href="#">A</a></li>
  3.                     <li><a rel="1" href="#">B</a></li>
  4.                     <li><a rel="2" href="#">C</a></li>
  5. </ul>


Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.     $(document).ready(function() {
  3.        
  4.         var words = [
  5.                 a = ['Asc', 'After', 'Asns'],
  6.                 b = ['Basic'],
  7.                 c = ['Calc', 'Composite']
  8.             ];    
  9.        
  10.         var destino = $('#words ul');
  11.         var lista = $('.abc li');
  12.        
  13.         lista.click(function(event) {    
  14.             event.preventDefault();
  15.            
  16.             //Add and remove "active" css class.
  17.             $(this).addClass('active').siblings().removeClass('active');
  18.            
  19.             // Get rel atribute value.
  20.             var abc = $(this).children().attr('rel');
  21.            
  22.             $(this).each(function() {
  23.                 for(var i = 0; i < words.length; i++) {
  24.                     if(abc == i) {
  25.                         for(var word = 0; word < words[i].length; word++) {
  26.                             destino.append('<li><a href="#">' + words[i][word] + '</a></li>');
  27.                         }
  28.                     }
  29.                 }
  30.  
  31.             });
  32.         });
  33.  
  34.     });
  35. </script>
__________________
_
  #2 (permalink)  
Antiguo 02/03/2012, 15:13
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 9 meses
Puntos: 35
Respuesta: (Consulta) Cargar contenido una sla vez y de un solo item

El problema es que estan utilizando el metodo append, el cual agrega datos manteniendo los que ya posee. Tu deberias reemplazar el dato por el clickeado.
Usa el metodo html() en vez de append().
__________________
I am Doyle please insert code.
  #3 (permalink)  
Antiguo 02/03/2012, 15:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 1.020
Antigüedad: 16 años, 1 mes
Puntos: 21
Respuesta: (Consulta) Cargar contenido una sla vez y de un solo item

Gracias.

Ahora imprime sólo un resultado, el último.

Esto es porque hay un if dentro? Debo concanetar?
__________________
_
  #4 (permalink)  
Antiguo 03/03/2012, 06:34
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 9 meses
Puntos: 35
Respuesta: (Consulta) Cargar contenido una sla vez y de un solo item

Cambiando append(....) por html(...), tu codigo esta mostrando solo las palabras de la letra clickeada, No es ese comportamiento el que deseas?
__________________
I am Doyle please insert code.
  #5 (permalink)  
Antiguo 03/03/2012, 07:06
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 2 meses
Puntos: 57
Información Respuesta: (Consulta) Cargar contenido una sla vez y de un solo item

Hola opzina, que tal.

La solución que te da doylelives, no es exactamente la más adecuada para el código javascript que nos muestras.

Y te muestra solo el ultimo que los resultados porque .html() reemplaza lo que hay antes y es por eso que solo te queda la ultima impresión. En cada ciclo del for imprimirá reemplazando lo que había antes y finalmente te quedará lo ultimo impreso.

La solución para tu caso, sin modificar nada más, es agregar en la linea 21 del codigo javascript que proporcionaste la siguiente linea de código:

Código Javascript:
Ver original
  1. destino.empty();

Que lo unico que hace es limpiar, o restaurar a como estaba inicialmente y asi poder imprimir con el <ul></ul> destino siempre vacío. Puedes usar otros métodos, pero estoy seguro que lo indicado te funcionará.

Pruébalo y dinos que tal te fue.
  #6 (permalink)  
Antiguo 03/03/2012, 08:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 1.020
Antigüedad: 16 años, 1 mes
Puntos: 21
Respuesta: (Consulta) Cargar contenido una sla vez y de un solo item

Muchas Gracias,

Igualmente voy a probar con otro camino. Creo que va a ser mejor.

Saludos.
__________________
_
  #7 (permalink)  
Antiguo 03/03/2012, 11:16
 
Fecha de Ingreso: marzo-2008
Mensajes: 1.020
Antigüedad: 16 años, 1 mes
Puntos: 21
Respuesta: (Consulta) Cargar contenido una sla vez y de un solo item

Les muestro cómo lo resolví, y acepto sugerencias, toda crítica me vendría como anillo al dedo.

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.  
  3.     $(document).ready(function() {
  4.        
  5.         // Información.
  6.         var words = [
  7.                 a = ['Asc', 'After', 'Asns'],
  8.                 b = ['Basic'],
  9.                 c = ['Calc', 'Composite'],
  10.                 d = ['Dino', 'Deno', 'Desert', 'Dynamic']
  11.             ];    
  12.        
  13.         //Destino de la info.
  14.         var destino = $('#words ul');
  15.        
  16.         //Letters Parent.
  17.         var lista = $('.abc li');
  18.    
  19.         lista.click(function() {
  20.             //Add and remove "active" css class.
  21.             $(this).addClass('active').siblings().removeClass('active');
  22.             // Obtengo la letra.
  23.             var letter = $(this).children().attr('rel');
  24.             // Obtengo las palabras para dicha letra.
  25.             var word = words[letter];
  26.            
  27.             destino.empty();
  28.             $(word).each(function(index) {
  29.                
  30.                 var palabritas = $('<li><a href="#">' + word[index] + '</a></li>');
  31.                 destino.append(palabritas);
  32.                
  33.             })
  34.            
  35.         });
  36.     });
  37. </script>
__________________
_

Etiquetas: jquery
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 04:03.