Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/01/2018, 06:13
TrinityCore
 
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.!