Foros del Web » Programando para Internet » Jquery »

No funciona correctamente el next()

Estas en el tema de No funciona correctamente el next() en el foro de Jquery en Foros del Web. Esto resulta sumamente raro, la otra vez le hice un cambio al codigo implementando algo y se me borro, hoy lo quise replicar y hay ...
  #1 (permalink)  
Antiguo 09/02/2013, 13:53
 
Fecha de Ingreso: julio-2010
Mensajes: 126
Antigüedad: 13 años, 9 meses
Puntos: 5
No funciona correctamente el next()

Esto resulta sumamente raro, la otra vez le hice un cambio al codigo implementando algo y se me borro, hoy lo quise replicar y hay algo que no esta funcionando bien y no entiendo porque.

Les muestro el html importante con respecto al problema:

Código HTML:
Ver original
  1. <div class="pros">
  2.     <header><h1>PROS</h1></header>
  3.     <textarea id="pro" class="animated" placeholder="Add PROS items to this list"></textarea>
  4.     <div class="enter">Press enter to add</div>
  5.     <ul id="listpro" class="listitems"></ul>
  6. </div>

Lo que quiero hacer aca es.... desde el <textarea> pasar al <ul> por medio de next haciendo lo siguiente:

Código Javascript:
Ver original
  1. $(this).next('ul').append($(item).delay(1).animate({left: 0, opacity: 1}, 400));

Pero con el next('ul') no se a donde se esta yendo, puesto que si hago un alert me tira "undefined".

De la unica forma que funciona el codigo es comentando o sacando el div del medio, es decir este:

Código HTML:
Ver original
  1. <!-- <div class="enter">Press enter to add</div> -->

Pero no entiendo porque, si se supone que el next() puede saltearse algo justamente declarando al elemento al que quiero ir, en este caso al 'ul'

Alguna idea?
  #2 (permalink)  
Antiguo 10/02/2013, 00:51
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: No funciona correctamente el next()

...pues mirando un poquito te consulto...

1ero. porque usas un textarea para agregar items?...lo mejor seria usar un input text...
2do. porque te complicas con el next(), podes directamente usar append
3ero. como caputaras el evento de la tecla enter?..


mira acá te lo modifique fácil...luego tu lo ajustas con la animacion, esto funciona en IE, Chrome, FF...lo que hacemos primero es detectar si se ha presionado una tecla y luego ver su valor, si es un enter, usando append anañes como lista el valor del input, y luego lo limpias para que siga funcionando...

aca te dejo el codigo, y aca te lo puse online para que veas...http://jsbin.com/oxibas/22/edit

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
  3. <meta charset=utf-8 />
  4. <title>JS Bin</title>
  5. </head>
  6. <div class="pros">
  7.     <header><h1>PROS</h1></header>
  8.   <input type="text" id="pro" class="animated" placeholder="Add PROS items to this list"/>
  9.  
  10.     <ul id="listpro" class="listitems"></ul>
  11. </div>
  12. </body>
  13. </html>

Código Javascript:
Ver original
  1. document.onkeypress=function(e){
  2. var esIE=(document.all);
  3. var esNS=(document.layers);
  4. var tecla=(esIE) ? event.keyCode : e.which;
  5. if(tecla==13){
  6.   $('#listpro').append('<li>' + $('#pro').val() + '</li>');
  7.   $('#pro').val('');
  8.   return false;
  9.   }
  10. };
  #3 (permalink)  
Antiguo 10/02/2013, 15:54
 
Fecha de Ingreso: julio-2010
Mensajes: 126
Antigüedad: 13 años, 9 meses
Puntos: 5
Respuesta: No funciona correctamente el next()

1ero. Ahora que lo preguntas no estoy seguro, supongo que el textarea se usa mas para cuando se le puede ingresar contenido mas grande? O me equivoco? Aun asi uso un plugin para que se expanda el textarea para abajo al ir rellenando con texto el mismo, pero en fin...

2do. No uso directamente append() porque yo solamente te mostre el div "pro", pero tengo otro div con los mismos elementos dentro... entonces mi idea es hacerlo dinamicamente que al mandarle enter se cree un item <li> dentro del <ul> siguiente, se entiende?

3ro. Te paso el codigo:

Código Javascript:
Ver original
  1. $('textarea').keydown(function(event) {
  2.         if(event.keyCode == 9) {
  3.             if($(this).attr('id') == 'con') {
  4.                 $('#pro').focus();
  5.                 event.preventDefault();
  6.             }
  7.         }
  8.         if(event.keyCode == 13) {
  9.             if (!$.trim($(this).val())) {
  10.                 $(this).val("");
  11.                 return false;
  12.             }
  13.             var value = $(this).val();
  14.             var item = "<li class='item'>" + value + "</li>";
  15.             $(this).next('ul').append($(item).delay(1).animate({left: 0, opacity: 1}, 400));
  16.             $(this).val("");
  17.            
  18.             var type = $(this).attr('id');
  19.             listitems[type].push(value);
  20.            
  21.             if(created == 0) {
  22.                 $('#create-list').slideDown(300);
  23.             }
  24.            
  25.             created++;
  26.             event.preventDefault();
  27.             return false;
  28.         }
  29.     });

Pero en fin, eso anda perfectamente.... el unico problema es el next() que no me saltea los elementos, por mas que le asigne un elemento como "ul". Es mas, antes me andaba... debe ser alguna boludez que cambie y esta afectando de alguna forma, pero no puedo entender que es.

EDIT: Si hago esto si funciona:

Código Javascript:
Ver original
  1. $(this).next().next('ul').append($(item).delay(1).animate({left: 0, opacity: 1}, 400));

Pero realmente no tiene sentido... como puede ser que no me saltee un div?

Etiquetas: correctamente
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 09:29.