Comunidad de diseño web y desarrollo en internet online

lista noticias jquery

Citar            
MensajeEscrito el 18 Dic 2007 11:53 am
Hola de nuevo!,
sigo con mi lista de noticias en jquery,pero tengo otro problema que espero que me lo podais resolver.
genero la lista de noticias de la base de datos:

Código :

$.getJSON("noticias.php",
        function(data){
            $("#noticias").html('');
            for (var i = 0; i < data.length; i++) {
         
   $("#noticias").append('<div id="contcabecera-not"><div id="cabecera-not" class="cabecera-not">'+data[i].fecha+' - '+data[i].cabecera+'</div><div class="borrarnoticia" id="borrar-not'+i+'" >Borrar'+i+'</div></div><div id="cuerpo-not'+i+'">'+data[i].cuerpo+'</div>');
   $('borrar-not'+i).click(function (){
            
   // PROBLEMA AQUI DENTRO LA VARIABLE i siempre es igual a data.length

   });
   }
});

Cada noticia tiene un enlace para borrarla y ahí esta el problema:
a cada div lo identifico seguido de la variable i del for para que sean unicos:

Código :

id="borrar-not'+i+'"
id="cuerpo-not'+i+'"

Esto si me funciona y se que cada enlace de borrar tiene un identificador distinto pero a la hora de asignarle un evento a cada enlace de borrar no se como hacerlo, no se como obtener el valor i de cada elemento, lo que hay dentro del click no es dinámico siempre tiene el ultimo valor que se le asigno a la i en el bucle for:

Código :

$('borrar-not'+i).click(function (){
            
   //AQUI DENTRO LA VARIABLE i siempre es igual a data.length

   });



Espero haberme explicado bien. A ver si me podeis ayudar.
Muchas gracias. ^^

Por yedeba

3 de clabLevel



 

msie7
Citar            
MensajeEscrito el 11 Mar 2008 09:27 am
No se si estoy en lo cierto pero si lo que quieres hacer es acceder al último carácter del id de un objeto que, por ejemplo es obj, puedes usar su id con obj.id:

Código :

var s = new String(obj.id);
var nuevaI = parseInt(s.substr(s.lenght,1));

no lo he probado, pero recuerdo haberlo usado alguna vez.

Por mussra

100 de clabLevel

1 tutorial

 

firefox
Citar            
MensajeEscrito el 11 Mar 2008 04:41 pm
loading............


Es un típico problema de CLOSURES en javascript, creo que jquery tiene un método BIND o algo así. Lee eso.


connection closed.

Por MaBoRaK

19 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Ago 2009 08:17 am
Hola. Me encuentro con el mismo problema y no he visto la solución, parece ser que el texto ha sido borrado.
¿Alguien sabe como solucionarlo? Gracias.

Por Mikis

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Ago 2009 01:42 pm
El problema yo especulo que pasa por que al momento de ejecutar la función para borrar i ya no vale i sino que quedo valiendo el último valor asignado. La solucion prodria ser hacer tu funciona si…

$('#borrar-not'+indice).click(function (){
$(this).parent("div").next("div").remove();
$(this).parent("div").remove();
});

Saludos!

Por nachon

22 de clabLevel



 

Argentina

firefox
Citar            
MensajeEscrito el 08 Jun 2010 08:16 am
MaBoRaK me dió la solución: .bind()

Aquí mi ejemplo:

Código Javascript :

for(i=1;i<=fotosTotal;i++){
       $('#foto_'+i).bind('click', {numero: i }, function(event){
      alert(event.data.numero);
       });
   }

Ahora, al hacer click sobre cada foto, ésta me devuelve su número correspondiente y no el número final del bucle:

#foto_1 devuelve 1
#foto_2 devuelve 2
#foto_3 devuelve 3
...

Por Fran666

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Jun 2010 02:54 pm
Tal como dice MaBoRaK es un problema relacionado con closure, esto muy habitual ya que uno tiende a creer que al crear una función dentro del loop esta retendrá el valor de x variable, pero este no es el caso ya que todas las funciones creadas en el loop comparten el valor de esta variable y por tanto al terminar el loop todas tendrán su ultimo valor :shock: , la solución mas sencilla es encerrar la función click en otra y a través de esta pasar el valor de i, así:

Código Javascript :

$.getJSON("noticias.php", 
        function(data){ 
            $("#noticias").html(''); 
            for (var i = 0; i < data.length; i++) { 
          
   $("#noticias").append('<div id="contcabecera-not"><div id="cabecera-not" class="cabecera-not">'+data[i].fecha+' - '+data[i].cabecera+'</div><div class="borrarnoticia" id="borrar-not'+i+'" >Borrar'+i+'</div></div><div id="cuerpo-not'+i+'">'+data[i].cuerpo+'</div>'); 
   $('borrar-not'+i).click( (function (i){ // función usada solo para retener el valor de i 
             
   return function(){ // esta función maneja el evento click 
// el código de esta función retiene el valor actual de i 
} 
 
   }())// ejecutamos directamente la función exterior
   );
   } 
});


Así al ejecutar directamente la primera función esta retornara otra función que sera la usada por el método click y gracias a closure el valor de i sera el mismo que al crear la función :? .

Espero que con esto se solucione el problema, si quieres saber mas sobre closure recomiendo que leas los tutoriales de John Resig y este articulo

Saludes (y)

Por sney2002

14 de clabLevel



Genero:Masculino  

Puerto Carreño - Vichada

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.