Bonjour à toutes et à tous,
Voici un bout de code( javascript + prototype) que j'ai sur ma page index, qui permet d'afficher des tooltips personnalisé sur les images :
Grosso modo, pour résumé l'action de ce code :
Dès qu'il y a un onMouseover sur une image, je choppe l'attribut ALT pour l'afficher dans un DIV (avec mise en forme CSS). Sur un onMouseout, je cache le DIV.
Pour une image qui existe au chargement de la page, pas de soucis, ça fonctionne bien.
Par contre, dès que je crée une nouvelle image par DOM, le onMouseover ne fonctionne pas dessus, normal.
Je dois lui remettre un observer dessus :
voici ma question :
Sur la page index, j'ai document.observe('dom:loaded', function() { ... })
Autrement dit, au chargement de la page, observe s'il y a tel ou tel évènement.
Existe t il une option autre que dom:loaded qui permet de dire que cette observation d'évènement s'applique aussi sur les éléments que je créé en dynamique ?
Ou suis je obliger de rajouter les Element.observe à chaque création ?
Merci d'avance
Modifié par Leorilan (23 Sep 2009 - 15:33)
Voici un bout de code( javascript + prototype) que j'ai sur ma page index, qui permet d'afficher des tooltips personnalisé sur les images :
function over(e){
var elm = Event.element(e);
if (Element.readAttribute(elm, "alt") != '' && Element.readAttribute(elm, "alt") != null)
{
if ($('AffMouseOver').style.display == 'none')
{
$('AffMouseOver').innerHTML = Element.readAttribute(elm, "alt");
var PositionLeft = 0;
var PositionTop = 0;
var SourisTop = Event.pointerY(e);
var SourisLeft = Event.pointerX(e);
var Largeur = Element.getWidth($('AffMouseOver'));
var Hauteur = Element.getHeight($('AffMouseOver'));
PositionLeft = SourisLeft;
PositionTop = SourisTop;
if(parseInt(SourisLeft) + parseInt(Largeur) > parseInt(window.outerWidth) - parseInt(Largeur))
{
PositionLeft = parseInt(SourisLeft) - parseInt(Largeur) ;
}
if(parseInt(SourisTop) + parseInt(Hauteur) > parseInt(window.innerHeight)- parseInt(Hauteur))
{
PositionTop = parseInt(SourisTop) - parseInt(Hauteur);
}
Element.setStyle( $('AffMouseOver'), { top: PositionTop + 'px', left : PositionLeft + 'px' } );
$('AffMouseOver').show();
}
}
}
function out(e){
var elm = Event.element(e);
$('AffMouseOver').hide();
}
document.observe('dom:loaded', function() {
$$('img').invoke('observe', 'mouseover', over).invoke('observe', 'mouseout', out)
});
Grosso modo, pour résumé l'action de ce code :
Dès qu'il y a un onMouseover sur une image, je choppe l'attribut ALT pour l'afficher dans un DIV (avec mise en forme CSS). Sur un onMouseout, je cache le DIV.
Pour une image qui existe au chargement de la page, pas de soucis, ça fonctionne bien.
Par contre, dès que je crée une nouvelle image par DOM, le onMouseover ne fonctionne pas dessus, normal.
Je dois lui remettre un observer dessus :
var IconeAction = document.createElement("img");
IconeAction.setAttribute("src","icones/printer.png");
IconeAction.setAttribute("align","absmiddle");
IconeAction.setAttribute("hspace","3");
IconeAction.setAttribute("border","0");
IconeAction.setAttribute("alt","Imprimer la liste");
IconeAction.setAttribute("title","Imprimer la liste");
Element.observe(IconeAction, 'mouseover', over);
Element.observe(IconeAction, 'mouseout', out);
voici ma question :
Sur la page index, j'ai document.observe('dom:loaded', function() { ... })
Autrement dit, au chargement de la page, observe s'il y a tel ou tel évènement.
Existe t il une option autre que dom:loaded qui permet de dire que cette observation d'évènement s'applique aussi sur les éléments que je créé en dynamique ?
Ou suis je obliger de rajouter les Element.observe à chaque création ?
Merci d'avance

Modifié par Leorilan (23 Sep 2009 - 15:33)