Foros del Web » Programando para Internet » Jquery »

Problema con evento en Ajax

Estas en el tema de Problema con evento en Ajax en el foro de Jquery en Foros del Web. Buenas gente, espero esten bien! Verán, estoy desarrollando un pequeño tooltip muy básico para mi sitio que cubra mis justas necesidades y poco a poco ...
  #1 (permalink)  
Antiguo 10/01/2018, 06:13
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 424
Antigüedad: 8 años, 8 meses
Puntos: 12
Problema con evento en Ajax

Buenas gente, espero esten bien!

Verán, estoy desarrollando un pequeño tooltip muy básico para mi sitio que cubra mis justas necesidades y poco a poco lo ire mejorando segun lo requiera.

Bien, el tooltip funciona perfecto cuando se usa en una pagina cargada normalmente, es decir, paginas que se cargan a travez de redirecciones <a href=''>Link Here</a>

¿Pero que sucede?, es que yo utilizo bastante la carga de documentos mediante la funcion load() dado a que esto facilita mucho el no tener que crear paginas como para: "cambiar un avatar", entre otras cosas muy comunes en sitios webs.

Ahora bien, el problema es que cuando desde el documento cargado con load() pongo a la escucha al evento $("[tooltip]").on("mouseenter") este en dicho documento va de maravilla, pero cuando luego de esto lo uso en la pagina actual del sitio, veo dos cosas:

1- que el tooltip sale totalmente a la izquierda del objeto seleccionado.
2- en el inspector desde la consola veo que se crean dos objetos de tipo #tooltip

Estoy seguro que esto es devido a que desde el documento que estoy cargando con load() lo pongo a la escucha del evento onmouseenter nuevamente y que esto hace que se llame dos veces a la funcion...

Ahora bien, la pregunta es: ¿como evito esto?, ¿como podria hacer yo, para usarlo en un documento cargado con load() y ademas en la pagina actual sin poner a la escucha al evento mas de una vez?

Aqui dejare mi code completo:
Código Javascript:
Ver original
  1. class Tooltip{
  2.  
  3.     constructor(){
  4.         return this;
  5.     }
  6.  
  7.     create(){
  8.         this.listener(); // llamar a listener para poner a la escucha del evento (sirve mas que nada para los documentos que son cargados mediante "load()").
  9.     }
  10.  
  11.     listener(){
  12.         var self = this;
  13.         $("[tooltip]").on("mouseenter", function(e){
  14.             $("body").append("<div id='tooltip'><div class='text'>"+$(this).attr('tooltip')+"</div></div>");
  15.             self.show(this);
  16.         }).on("mouseleave", this.close);
  17.     }
  18.  
  19.     show(object){
  20.         // Posicion del Tooltip (Al centro del objeto) //
  21.         var left = $(object)[0].getBoundingClientRect().left-(($("#tooltip")[0].getBoundingClientRect().width/2)+($(object)[0].getBoundingClientRect().width/2));
  22.         var top = $(object)[0].getBoundingClientRect().y+$(object)[0].getBoundingClientRect().height+5;
  23.         $("#tooltip").css({
  24.             "left":left+"px",
  25.             "top":top+"px"
  26.         });
  27.         $("#tooltip").show();
  28.     }
  29.  
  30.     close(){
  31.         $("#tooltip").remove();
  32.     }
  33.  
  34. }
  35. var tooltip = new Tooltip();

PD: Si creen que puedo mejorar el code, quisiera que me dijeran sus ideas, gracias y espero que me ayuden.!

Etiquetas: ajax, evento, javascript
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 11:25.