Foros del Web » Programando para Internet » Jquery »

Anidamiento de ordenes de carga indeseados

Estas en el tema de Anidamiento de ordenes de carga indeseados en el foro de Jquery en Foros del Web. Hola, buen día. Recurro nuevamente a ustedes debido a que no logro encontrar el porque sucede algo con mi código. Mi problema es el siguiente, ...
  #1 (permalink)  
Antiguo 28/09/2013, 21:19
 
Fecha de Ingreso: septiembre-2011
Ubicación: Ciudad de México
Mensajes: 7
Antigüedad: 12 años, 8 meses
Puntos: 0
Anidamiento de ordenes de carga indeseados

Hola, buen día. Recurro nuevamente a ustedes debido a que no logro encontrar el porque sucede algo con mi código.

Mi problema es el siguiente, tengo una página con index.html que posee un div denominado #carga en el cual vierto el contenido de la navegación del sitio, todo esto para evitar recargar la página una y otra vez.

Para lo anterior ocupo un script en jQuery que carga y descarga contenido en el div #carga. Todo parece funcionar adecuadamente, pero tengo 2 únicos enlaces que se abren en una nueva ventana, para lo cual añado una clase a su etiqueta <a>; compruebo si el vínculo posee la clase y si no la tiene hago que cargue la página en el div #carga

Todo funciona hasta que se clickea un vinculo para una nueva ventana; si se ha hecho click en otro vinculo, que cargue contenido dentro del div #carga usa ese click para abrir una ventana extra con el contenido del vínculo externo. Lo peor de todo es que toma en cuenta el número de clicks anteriores y puede llegar a abrir muchisimas ventanas nuevas.

Al principio pensé que era por la cache y establecí el valor en false, pero sigue el mismo comportamiento. También pensé que sería por una línea de código donde atraigo el mismo archivo .js que uso, y lo hago mediante getScript; pero ya deshabilité dicha línea de código y continúa sin funcionar.

Aquí les dejo mi código:
Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.     $.ajax({ cache: false});
  3.     $("a").on("click", function(e){
  4.         e.preventDefault();
  5.        
  6.         if ($(this).hasClass("ext"))
  7.         {
  8.             window.open($(this).attr("href"), "_blank");
  9.         }
  10.         else
  11.         {
  12.             $.get($(this).attr("href"), function(data){
  13.                 $("#carga").html(data);
  14.                 $("#carga").fadeIn().animate({height: "auto"}, 5000);
  15.                 /*$.getScript("js/refrescador.js");*/
  16.             });
  17.         }
  18.     });
  19.  
  20.     $(document).ajaxStart(function(){
  21.         $("#cargando").fadeIn();
  22.         $("#encerrar_cargando").fadeIn();
  23.         console.log("Se inicio ajaxStart");
  24.     });
  25.  
  26.     $(document).ajaxStop(function(){
  27.         $("#cargando").fadeOut("slow");
  28.         $("#encerrar_cargando").fadeOut("slow");
  29.         console.log("Concluyó ajaxStart");
  30.     });
  31. });

De antemano muchas gracias
  #2 (permalink)  
Antiguo 30/09/2013, 11:39
 
Fecha de Ingreso: septiembre-2011
Ubicación: Ciudad de México
Mensajes: 7
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Anidamiento de ordenes de carga indeseados

Bueno, ya solucioné el problema. No estoy seguro si de la mejor manera pero lo logré. El problema reside en el uso del primer $(this) que se encarga de abrir el vínculo en una nueva ventana. Lo que hice fue almacenar el selector dentro de una variable así:

Código Javascript:
Ver original
  1. liga = $(this).attr("href");

para después pasar dicha variable como argumento a la función de carga

Código Javascript:
Ver original
  1. window.open(liga, "_blank");

y ya no me abre el montón de nuevas ventanas, aún cuando le de click a todos los vínculos de la página.

Aunque aún me abre una ventana extra si se hace click en algún vínculo antes de clickear el vinculo que ha de abrirse en una nueva ventana

Etiquetas: Ninguno
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 01:00.