Comunidad de diseño web y desarrollo en internet online

Error en IE "se requiere un objeto" con ToolTip Javascript

Citar            
MensajeEscrito el 11 Jul 2008 03:17 am
Buenas a todos. Estoy interesado en usar este código http://bonrouge.com/demos/js_tooltip.htm para una cosa muy concreta. En sí el script crea un span con el contenido del atributo title de un elemento. El script funciona bien en todos los navegadores. Sin embargo en IE (yo tengo el 7) si mueves muy rápido el ratón desde la imagen de ejemplo sobre el Tooltip da el error que he mencionado. Le he dejado un comentario al autor pero no ha respondido. ¿A alguien se le ocurre algo?

El código Javascript:
_______________________________________________________________________

Código :

function showTT(el) {
var ttext=el.title;
var tt=document.createElement('SPAN');
var tnode=document.createTextNode(ttext);
tt.appendChild(tnode);
el.parentNode.insertBefore(tt,el.nextSibling);
tt.className="tt";
el.title="";
}
function hideTT(el) {
var ttext=el.nextSibling.childNodes[0].nodeValue;
el.parentNode.removeChild(el.nextSibling);
el.title=ttext;
}
function tooltip() {
var imgs=document.getElementsByTagName('img');
for (i=0; i<imgs.length; i++) {
imgs[i].onmouseover=function() {showTT(this);}
imgs[i].onmouseout=function() {hideTT(this);} 
}
}
window.onload=tooltip;

____________________________________________________________

IE parece que encuentra el error dentro de la función hideTT en la línea el.parentNode.removeChild(el.nextSibling);

Por doblefantasia

15 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Jul 2008 10:10 am
Curioso y divertido error...
Resulta que el IE... lee "dos veces" el evento "onmouseout" cuando te mueves "muy rápido", así que intenta quitar el "tooltip" dos veces... y evidentemente, la segunda, éste ya no existe.

Una manera de "parchear" el error (te dejo a tí investigar la mejor forma, pues ya te dejo destapado "el motivo"), es:

Código :

   if(document.all)                                      //sólo en IE
      {if(el.parentNode.innerHTML.indexOf('class=tt')<0) //revisa que siga existiendo el 'tooltip' (className="tt")
         {return false;}                                 //si no existe, no continúa.
      }
Esto, iría en la primera línea de la función "hideTT()", que es la que causa el error.

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 11 Jul 2008 03:13 pm
gracias, rizome, voy a ver que consigo

Por doblefantasia

15 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Jul 2008 04:12 pm
Rizome, el "parche" funciona perfectamente. Muchas gracias por resolverme la curiosidad, no sabía que le pegabas tan bien a javascript. La única duda que tengo ahora es por qué IE lee "más de una vez" el onmouseout mientras que Firefox, Opera y Safari no. ¿Expediente X-Microsoft?

Por doblefantasia

15 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Jul 2008 04:16 pm
Porque IE es basura.
(imagino que habrá tb una explicación oficial)

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 11 Jul 2008 04:18 pm
jaja :-)
(con esa explicación me llega)

Por doblefantasia

15 de clabLevel



Genero:Masculino  

firefox

 

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