Problème attribut Title sur un Span

Résolu
cs_Lelys Messages postés 18 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 9 mars 2008 - 26 mai 2007 à 22:21
cs_Lelys Messages postés 18 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 9 mars 2008 - 29 mai 2007 à 10:17
Bonjour !

Je suis en train de créer une info-bulle personnalisée sur mon site, le texte de celle-ci est désigné par l'attribut Title du Span lorque l'on positionne le curseur sur le celui-ci.
Pour que seul mon info-bulle perso s'affiche (donc sans le texte du Title), je met la valeur du Title du Span à -> span.title = "";
Mon problème est qu'il m'est impossible ensuite d'attribuer une valeur à mon Title, comme si l'avoir vidé avait complètement supprimé l'attribut...

Voilà, j'espère avoir été clair, et merci d'avance !

12 réponses

cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 mai 2007 à 14:49
>>donc le reste du code qui ne serait "pas compatible" ?

    compatible, je ne sais pas, mais erroné c'est sûr.

>>après un temps y'a setTimeout, mais le code qui se trouve après s'execute quand même.
    oui

>>tu connaitrais pas un moyen pour bloquer la suite d'un code x secondes

    tu as ça par exemple :
                function actuelle()
                {    instructions 1
                     ici, il faudrait attendre 10 secondes sans dérouler le reste de la function
                    instructions 2
                }
   
    il faut faire ( ou l'équivalent ) :
                function suite()
                {    instructions 2
                }
                function actuelle()
                {    instructions 1
                    setTimeout ("suite();"délai);
                }





<hr />



Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
3
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
27 mai 2007 à 14:25
Bonjour,

    pour moi ( IE,FF... ) pas de problème
    et c'est moi qui doit donner un script en exemple ?
    c'est un monde ça....

exemple

raz
nouveau

<hr />


Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
0
cs_Lelys Messages postés 18 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 9 mars 2008
27 mai 2007 à 21:29
Oups ! Mes excuses pour le code, j'y ai pensé mais ça m'est effectivement sortit de l'esprit.

C'est un code semblable qui pose problème, mais pas dans un onclick.
C'est à dire que le div est vidé sur un onmouseover et rempli sur un onmouseout (remplissage qui ne fonctionne donc pas), c'est vraiment étrange !

Merci d'avoir répondu.
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 mai 2007 à 08:27
c'est sorti de l'esprit... mais sans y revenir !    puisque toujours pas de code !
    c'est un span ou un div ?
    qu'est-ce qui est vidé au onmouseover ?
    le title ? dans ce cas, au survol, rien ne s'affiche.
    le contenu ? dans ce cas, plus de survol posible.

<hr />


Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Lelys Messages postés 18 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 9 mars 2008
28 mai 2007 à 09:37
J'ai effectivement fais une erreur, je parlais bien d'un Title et non d'un Div.
Je ne voyais pas l'interet de mettre un code puisque le votre est quasi identique au miens.

Quoi qu'il en soit, je viens de trouver le problème :
Mon code est passé par une fonction helpS(this); sur le onMouseOver du Span.

La fonction effectue (entre autres) l'action suivante sur le Span :

var sauvTitle;
function helpS(element) {
    sauvTitle = element.title;
    element.title = "";
}

Ce qui sauvegarde et efface le Title sans aucun problème, pour qu'il n'y est donc plus l'info-bulle du navigateur : le but recherché.
Cependant, lorsque j'appelle ma fonction helpH(this); sur le onMouseOut du Span (qui me permet entre autres de restaurer le Title sur son Span) :


function helpH(element) {

    element.title = sauvTitle;

}

Cette fonction n'a aucun effet.

J'ai donc fais plusieurs tests et j'en suis arrivé à la conclusion (en passant par un getElementById "brute", comme votre code) que le problème vient de mon passage par "this", exemple :

Si je remplace ma fonction helpS(); comme ceci :


function helpH(element) {


    document.getElementById("le_span_en_question").title = sauvTitle;


}

Le title est ici bien restauré.

Y'a-t-il une différence entre This et getElementById ?
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 mai 2007 à 10:21
>>Y'a-t-il une différence entre This et getElementById ?
    getElmentById recherche un élément dans la page qui possède l'ID donné
    this c'est l'objet ( l'élément ) où l'on est.
    tout dépend des appels donc.... et ici : on n'a pas !



si je comprend : onmouseover, on mémorise le title et on l'efface,
onmouseout, on remet le title
    quel intêret ????

soit on a un title et il apparait au onmouseover
soit on n'en a pas, et il n'apparait pas !
de toute manière au onmouseout.... il n'apparait pas.

<hr />


Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
0
cs_Lelys Messages postés 18 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 9 mars 2008
28 mai 2007 à 10:46
> getElmentById recherche un élément dans la page qui possède l'ID donné
this c'est l'objet ( l'élément ) où l'on est.

tout dépend des appels donc.... et ici : on n'a pas !





Je ne m'en serais pas douté, je ne suis pas si bete pour ne pas avoir déduit que getElementById retourne l'element qui possède tel Id et que This est l'element, à ce niveau la, je ne serais pas capable de développer des sites internet.
Je voulais juste savoir pourquoi Title marche avec getElement et pas avec This.

>si je comprend : onmouseover, on mémorise le title et on l'efface,
onmouseout, on remet le title
    quel intêret ????

C'est bien pour cette raison que j'ai précisé deux fois "entre autres", c'est évident que je vais m'amuser à créer une fonction qui enregistre le Title et une autre qui le restaure dans ce seul but, encore une fois, merci de me prendre pour un idiot.
Je vous ai expliqué qu'il s'agissait d'un info-bulle perso, il faut donc que j'efface celle du navigateur, et la restaure une fois l'info-bulle disparu.

Je n'ai jamais prétendu que le Title pouvait apparaitre sur un onMouseOut.
Tout ce que je dis c'est qu'il est impossible de définir un Title à l'aide de this.title après l'avoir effacé.

La prochaine fois je me débrouillerais tout seul, ça vaudra mieux.

Merci tout de même de votre "aide".
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 mai 2007 à 11:01
>>Je ne m'en serais pas douté, je ne suis pas si bete pour ne pas avoir déduit ...
    je ne faisais que répondre à ta question. pourquoi tuprends la mouche
       de manière ridicule, alors que je ne fais que te répondre ????


>>Tout ce que je dis c'est qu'il est impossible de définir un Title à l'aide de this.title après l'avoir effacé.
    non.... et  aucune raison.
    mais encore une fois : tu ne nous montres pas  comment tu fait !
    enfin, pas tout, pas ce qu'il faut, et ton erreur est probablement
        ailleurs de ce que tu nous montres. tout simplement.

>>La prochaine fois je me débrouillerais tout seul, ça vaudra mieux.
>>Merci tout de même de votre "aide".
     j'ai fait ce que j'ai pu, enfin les infos données.
    parce que chez moi... ça baigne

>>encore une fois, merci de me prendre pour un idiot.
    je ne tenrais que de comprendre ce que tu voulias faire
    que me semble parfaitement inutile. probablement parce
    que tu n'expliques pas le but.  une infobulle perso
    n'explique pas ce que tu fais.




<hr />



Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
0
cs_Lelys Messages postés 18 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 9 mars 2008
28 mai 2007 à 11:24
Excuse moi de m'être emporté.

Je t'explique ce que j'aimerais faire, demande moi s'il te manque des détails :

J'essaye de créer une info-bulle qui apparait en fondu comme sur la nouvelle version du site de PayPal, mais si tu n'a pas de compte ça ne va pas te dire grand chose.
Je fais ça pour que les visiteurs aient une aide qui ne disparait pas au bout de 3 secondes (comme le fait l'info-bulle des navigateurs avec le Title), que le texte soit plus gros et que je puisse en mettre plus.

Le texte de l'info-bulle doit etre celui de l'attribut Title de l'element que l'on survole (et qui fera donc apparaitra l'info-bulle perso au onMouseOver), je pourrais utiliser un attribut perso (du style ) pour que le Title du navigateur n'apparaissent pas, mais il faut que mon site soit validé XHTML et les attribut perso sont interdits, j'aimerais aussi ne pas affecter un Id à chaque Span d'aide pour une autre raison.

Voila le code complet de ma fonction d'affichage de l'info-bulle :
function getById(id) {
    return document.getElementById(id);
}

var helpWhileS = 0;
function helpS(element) {
    if(helpWhileS == 0) {
        getById("helpBox").style.visibility = "visible";
        getById("helpBox").style.top = (element.offsetTop + 17)+"px";
        getById("helpBox").style.left = (element.offsetLeft - 10)+"px";
        getById("helpBoxInner").innerHTML = element.title;
        element.title = "";
    }
    if(helpWhileS != 10) {
        setTimeout("helpS('"+element+"');", 50);
    }
    else {
        helpWhileS = 0;
        return;
    }
    helpWhileS++;
    getById("helpBox").style.opacity = ((0 + helpWhileS) / 10);    getById("helpBox").style.filter "alpha(opacity "+((0 + helpWhileS) * 10)+")";
}

Et celui de la fonction qui la cache :
var helpWhileH = 0;
function helpH(element) {
    if(helpWhileH != 10)
        setTimeout("helpH('"+element+"');", 50);
    else {
        element.title = getById("helpBoxInner").innerHTML;
        getById("helpBox").style.visibility = "hidden";
        helpWhileH = 0;
        return;
    }
    helpWhileH++;
    getById("helpBox").style.opacity = ((10 - helpWhileH) / 10);    getById("helpBox").style.filter "alpha(opacity "+((10 - helpWhileH) * 10)+")";
}

"element" correspond donc au this du Span :
aide ?

J'espère avoir été plus clair.

Encore désolé de m'être énervé mais je suis la dessus depuis des jours sans arriver à rien, ça me stresse à force...

Merci.
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
28 mai 2007 à 11:55
on parle bien de title et de this ?
    je ne regardes pas le reste !?!        ( car ça vient de ça ! )

<script type="text/javascript">
function getById(id) {
    return document.getElementById(id);
}
function helpS(element) {
        getById("helpBoxInner").innerHTML = element.title;
        element.title = "";
}
function helpH(element) {
        element.title = getById("helpBoxInner").innerHTML;
}
</script>

aide ?

j'ai sucré ce qui ne concerne pas title et this... et this.title : ça baigne.

remarques :

                        c'est exactement le même résultat que :

aide ?
       

                                    et aussi que :

un texte d'aide

aide ?

                   

    maintenant, si tu veux qu'on regardes le reste....

<hr />


Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
0
cs_Lelys Messages postés 18 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 9 mars 2008
28 mai 2007 à 13:47
Hmm... j'ai testé ce que tu as mis (donc sans le reste du code) et ça fonctionne... c'est donc le reste du code qui ne serait "pas compatible" ?

Je vais essayer un par un les ligne de codes pour voir si une bloquerait quelque chose.

Je me demande si ça pourrait pas venir de mon setTimeout...
Si seulement en Javascript il y avait une fonction pour attendre !
Parceque quand on veux lancer une fonction après un temps y'a setTimeout, mais le code qui se trouve après s'execute quand même... tu connaitrais pas un moyen pour bloquer la suite d'un code x secondes ?

Merci pour ton aide !
0
cs_Lelys Messages postés 18 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 9 mars 2008
29 mai 2007 à 10:17
Et bien, merci pour ton aide, je vais revoir mon code avec ta solution.
0
Rejoignez-nous