Partage
  • Partager sur Facebook
  • Partager sur Twitter

Débutant javascript

Sujet résolu
    15 décembre 2010 à 16:21:10

    Bonjour a tous, et bien voila, j'ai voulu faire mon premier travail perso en javascrip, mais cela ne fonctionne pas correctement ^^

    Voila mon script, j'explique après:

    function infobulle(text)
    {
    	var x = text.clientX;
    	var y = text.clientY;
    	var element = document.getElementById('infobulle').className;
    	
    	element.style.left = x + 'px';
    	element.style.top = y + 'px';
    	element.style.visibility = visible;
    	
    	element.innerHTML = text;
    }
    

    <div class="infobulle" style="position: absolute; 
    	   visibility : hidden;
    	   border: 1px solid #000000;
    	   padding: 5px;
    	   font-family: Arial, 'Arial Black', 'Times New Roman', Times, serif;
    	   font-size: 12px;
    	   color: #000000;
    	   background-color: #FFFFFF;">
    </div>
    <span onmouseover="infobulle('<p>Help me</p>');">Aidez moi</span>
    


    Ce que je veux, c'est faire apparaître le texte voulu dans une sorte de petite bulle, quand on passe la souris sur un endroit précis (ici le texte).
    Mais je ne sais pas vraiment ou je bloque, et rien n'apparait :(
    • Partager sur Facebook
    • Partager sur Twitter
      15 décembre 2010 à 16:53:23

      Aïe!

      Un peu de debugging pour essayer de te montrer pourquoi ça ne marche pas:
      tout d'abord:
      <span onmouseover="infobulle('<p>Help me</p>');">Aidez moi</span> Ici on déclenchera la fonction infobulle lorsque la souris sera au-dessus du span.

      Ensuite la fonction javascript:
      function infobulle(text)
      {
      	var x = text.clientX;
      	var y = text.clientY;
      	var element = document.getElementById('infobulle').className;
      	
      	element.style.left = x + 'px';
      	element.style.top = y + 'px';
      	element.style.visibility = visible;
      	
      	element.innerHTML = text;
      }
      

      ligne 1: Infobulle est donc lancée avec comme paramètre une chaine de caractère, text vaut: '<p>Help me</p>'
      ligne 3: x vaut la valeur de la propriété clientX de la variable text. Or text est une chaine de caractères. Donc clientX n'est pas défini ! donc x vaut undefined . Je pense que là tu confonds avec l'objet Event.
      ligne 4: même problème que la ligne 3
      ligne 5: document.getElementById('infobulle') va récupérer un élément dans la page ayant pour id 'infobulle'. Or tu n'as pas d'élément ayant cet id. Regardes bien le div, il a une class nommée 'infobulle' mais pas d'ID.
      Ensuite tu mets dans element la valeur de la class de cet élément (bon là déjà l'interpréteur javascript a du planter car on cherche la valeur de className à un objet qui vaut null puisque l'élément n'a pas été trouvé)
      En fait vu les lignes suivantes je pense que tu ne cherches pas à obtenir la/les class de l'élément mais l'élément lui-même. Donc enlève le .className

      ligne 7 et 8: En supposant que element est un élément. Tu modifies le style de celui-ci (pas de problèmes ici)
      ligne 9: Tu affectes au style visibility le contenu de la variable visible. Je pense que tu as du oublier les guillemets autours de visible
      ligne 11: pas de soucis (si element est un élément)

      Pour corriger ces problèmes je pense que tu devrais y arriver par toi-même. Le plus compliqué doit-être la récupération de l'objet event.
      Par exemple, dans le onmouseover tu ajoutes le event: onmouseover="infobulle(event,'<p>Help me</p>');"
      Tu ajoutes un 2e argument à ta fonction function infobulle(e,text)
      et que tu ajoutes une ligne avant la déclaration des variables pour assurer la compatibilité avec IE(8-): e=e||window.event;
      maintenant tu pourras utiliser la variable e qui contiendra l'évènement déclencheur :)
      • Partager sur Facebook
      • Partager sur Twitter
        15 décembre 2010 à 17:25:50

        Voila j'ai changé comme il fallait et tout fonctionne correctement :D
        J'ai même ajouter la fin de l'evenement qui cache l'infobulle

        Merci a toi restimel :D
        • Partager sur Facebook
        • Partager sur Twitter

        Débutant javascript

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown