Foros del Web » Programando para Internet » Jquery »

me saltan muchos carteles (bucles) en funcion eliminar

Estas en el tema de me saltan muchos carteles (bucles) en funcion eliminar en el foro de Jquery en Foros del Web. Buenas gente... Necesito que me ayuden con un problemita que tengo. Lo que me pasa es que anda todo bien salvo que cuando quiero eliminar ...
  #1 (permalink)  
Antiguo 01/04/2013, 11:07
 
Fecha de Ingreso: abril-2013
Mensajes: 3
Antigüedad: 11 años
Puntos: 0
me saltan muchos carteles (bucles) en funcion eliminar

Buenas gente...
Necesito que me ayuden con un problemita que tengo.
Lo que me pasa es que anda todo bien salvo que cuando quiero eliminar me salta el cartel tantas veces como registros tengo...
Osea si pongo eliminar me salta el cartel, pongo aceptar y me salta dependiendo la cantidad de registros. Paso el codigo. PORFAVOR AYUDA QUE NO SE QUE HAGO MAL

Código:
// JavaScript Document

            $(document).ready(function(){
                fn_dar_eliminar();
				fn_cantidad();
               
            });
			
			function fn_cantidad(){
				cantidad = $("#grilla tbody").find("tr").length;
				$("#span_cantidad").html(cantidad);

			};
            
            function fn_agregar(){
                cadena = "<tr>";
                cadena = cadena + "<td>" + $("#valor_ide").val() + "</td>";
                cadena = cadena + "<td>" + $("#valor_uno").val() + "</td>";
                cadena = cadena + "<td>" + $("#valor_dos").val() + "</td>";
                cadena = cadena + "<td>" + $("#valor_tres").val() + "</td>";
                cadena = cadena + "<td style='text-align:center;'><a class='elimina' href='#'><img src='close_pop.png' /></a></td>";
                $("#grilla tbody").append(cadena);

document.getElementById("suma").value = parseInt(document.getElementById("suma").value) + parseInt($("#valor_tres").val());
                /*
                    aqui puedes enviar un conunto de tados ajax para agregar al usuairo
                    $.post("agregar.php", {ide_usu: $("#valor_ide").val(), nom_usu: $("#valor_uno").val()});
                */
                fn_dar_eliminar();
				fn_cantidad();
                alert("Usuario agregado");
            };
            
            function fn_dar_eliminar(){
                $("a.elimina").click(function(){
                    id = $(this).parents("tr").find("td").eq(0).html();
					mon = $(this).parents("tr").find("td").eq(3).html();
					respuesta = confirm("Desea eliminar el usuario: " + id);
                    if (respuesta){
						document.getElementById("suma").value = parseInt(document.getElementById("suma").value) - parseInt(mon);
                        $(this).parents("tr").fadeOut("normal", function(){

							$(this).remove();

							fn_cantidad();
                            /*
                                aqui puedes enviar un conjunto de datos por ajax
                                $.post("eliminar.php", {ide_usu: id})
                            */
                        })
                    }
                });
            };
  #2 (permalink)  
Antiguo 01/04/2013, 11:25
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: me saltan muchos carteles (bucles) en funcion eliminar

Hola:

Deberías indicar ¿qué librería usas?, ya que $() no es nativo javascript...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 01/04/2013, 11:28
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: me saltan muchos carteles (bucles) en funcion eliminar

El problema está en
$("a.elimina").click(function(){ ....codigo.... });

Esa función al parecer la ejecutas cada vez que se crea una nueva fila, y eso tiene un problema gordo:

http://jsfiddle.net/marlanga/9WrbH/

Si pinchas en "test", no pasa nada porque no tiene ningún evento asociado a su onclick. Si pinchas en "clikc" se crea ese evento, y luego si pinchas en "test", se muestra un alert. Si pinchas muchas veces en "click", y luego en "test", se mostrarán muchos alerts.

El tema es que jquery almacena una pila de eventos. En vez de utilizar sólo el último asignado, lo que hace es ejecutar todos los eventos creados para ese elemento. En tu caso, creas el evento onclick de cada enlace cada vez que añades un registro, y aparece el problema.

Para resolverlo tienes que sacar esa función de "dar_fn_eliminar" y pornerla en el
$(document).ready(function(){ ... });
del principio.

Pero en vez de usar un
$("a.elimina").click(function(){...

Es mejor un evento delegado
$(document).on("click","a.elimina", function(){ ...

Así te ahorras crear un montón de funciones que escuchan eventos en cada enlace. Ahora solo habrá uno que hará que funcionen todos los enlaces con la clase "elimina" que hay en ese momento creados, pero también los que se creen por código en el futuro.
  #4 (permalink)  
Antiguo 01/04/2013, 11:44
 
Fecha de Ingreso: abril-2013
Mensajes: 3
Antigüedad: 11 años
Puntos: 0
Respuesta: me saltan muchos carteles (bucles) en funcion eliminar

marlanga hice lo que dijiste y me funciono de 10...
muchas gracias amigo... un abrazo
  #5 (permalink)  
Antiguo 01/04/2013, 11:56
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: me saltan muchos carteles (bucles) en funcion eliminar

Hola:

No sé si has leído mi mensaje, pero por la respuesta de marlanga he movido el tema a este foro, pero por regla general los muevo a un subforo más genérico.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Etiquetas: ajax, bucles, carteles, funcion, javascript, muchos, php
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 10:50.