Problème de Popup-Tooltip

[Résolu]
Signaler
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Bonjour à tous,

Voilà, j'ai un petit problème avec un simili poup-tooltip. Sur une page, l'utilisateur clique sur une image, ceci appel alors une fonction à base d'ajax qui va récupérer des infos via une page php dans une base de donnée. Lorsque le tooltip/popup s'affiche, des liens sont présents dedans. Jusque là c'est OK.

Le problème c'est que quand l'utilisateur clique sur un lien, on appel de nouveau une fonction ajax qui va rechercher de nouveau des infos et les affiches dans le même tooltip/popup.
Les infos s'affichent bien (fonction talk2), mais tout de suite la fenêtre se ferme.

Voici les codes sources incriminés :

Page principale :

blabla ....

Blabla ...

Blabla ...



Page javascript :
function talk2(type) {


if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();// FIREFOX
else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");// IE


document.getElementById("texte").style.display = "none"; //je ferme la boite avant de la réafficher
xhr_object.open("GET", "armes.php?id=" + type, false); //false => on attend le retour 
xhr_object.send(null);  
document.getElementById("texte").style.display = "block";
document.getElementById("texte").innerHTML=xhr_object.responseText;
}

function talk(type) {


if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();// FIREFOX
else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");// IE


   xhr_object.open("GET", "talk.php?id=" + type, false); //false => on attend le retour 
   xhr_object.send(null);  

document.getElementById("texte").style.display = "block";  
document.getElementById("texte").innerHTML=xhr_object.responseText;
}


La fonction talk renvoit un tableau avec des liens (pas de soucis), dont les liens sont de la forme :

En fait tout fonctionne SAUF que la deuxième fois, la fenêtre se ferme
Merci pour votre aide.

33 réponses

Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

Ca y est j'ai trouvé le pourquoi du comment de tout cà ! Mais je ne comprends pas pourquoi celà n'a pas plu au code ajax.

Donc, voici la réponse, lorsque je clique sur la fonction talk, j'ai le droit à un dialogue. Sur ce même dialogue certaines lignes pour renvoyer au dialogue talk2 sont codés comme suit :
[ Blabla]

Et bien pour que le texte de talk2 reste, il a fallu mettre href="#".

Je veux bien, mais j'ai pas compris pourquoi :(

Si quelqu'un a une explication ...
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Bonjour,

As-tu essayé en supprimant cette ligne :
document.getElementById("texte").style.display = "none";

Nickadele
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

Effectivement, j'ai essayé, celà ne m'a rien donné, idem en enlevant dans talk2 :

document.getElementById("texte").style.display = "block";

puisqu'il été toujours à 'block'
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Peut-être y-t-il un problème dans ce que la page php renvoi !?
Une balise mal fermée ou tout autre !?
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

La page PHP renvoit un tableau dont voici le détail (récupérer par alert) :


,
Achats,
,

----

,
<table border="0" cellspacing="2" cellpadding="2">, Texte 1, etc .... , Texte,

etc ....
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

Peut être celà peut il aider, mais IE affiche en bas de browser le symbole d'exclamation en disant :

'Ligne 309, car 16, caractère incorrect, Code: 0, URL: http://localhost/' (je précise, j'ai fais un test sur un serveur Web, même problème).

La seule chose c'est que la ligne 309, je ne sait pas à quoi elle fais référence. A la page originale ? Si oui, la ligne n'a aucune erreur. Si c'est à une compilation de la page PHP + des templates alors là on est mal parti

Par contre et c'est vrai que je ne l'ai pas dit (honte à moi  ), lorsque la boîte se ferme, je reviens à la page d'acceuil du site.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Il serait pas là le fautif :
onClick="document.getElementById('texte').style.display='none' "

???
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Si tu ne dis pas tout.... ;)
As tu regardé avec la console debug Javascript (mozilla) pour situer l'erreur ?
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

Et non j'y avais pensé  J'ai testé en le supprimant mais celà n'a rien changé.
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

Arf, cà il va falloir attendre ce soir chez moi, je te tiens au courant
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Ok, la seule chose qui m'étonne un peu c'est t'as façon de codé ton appel Ajax.
Normalement lors de l'envoie des valeurs au serveur, on définit quelle fonction va recevoir le résultat et on y traite les différentes réponses qu'Ajax renvoie ainsi que le résultat finale.
C'est peut-être tout simplement de là que provient ton erreur.

Nickadele
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

Et voilà, j'ai testé avec la console, il n'y a aucune erreur.

Concernant l'appel Ajax, tu aurais plus vu un truc du genre :

function talk2(type) { if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();// FIREFOX
else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");// IE

document.getElementById("texte").style.display = "none"; //je ferme la boite avant de la réafficher
xhr_object.open("GET", "armes.php?id=" + type, false); //false => on attend le retour
xhr_object.send(null); 

    xhr_object.onreadystatechange = function() { talk3(xhr_object); };   
  }
 
function talk3(xhr_object)
  {
  if (xhr_object.readyState==4)
    {
document.getElementById("texte").style.display = "block";

document.getElementById("texte").innerHTML=xhr_object.responseText;
    }
  }
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

Bien, je crois que tu as entièrement raison :

function talk2(type) { if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();// FIREFOX
else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");// IE

document.getElementById("texte").style.display = "none"; //je ferme la boite avant de la réafficher
xhr_object.open("GET", "armes.php?id=" + type, true );
xhr_object.send(null); 

    xhr_object.onreadystatechange = function() { talk3(xhr_object); };   
  }
 
function talk3(xhr_object)
  {
  if (xhr_object.readyState==4)
    {
document.getElementById("texte").style.display = "block";
document.getElementById("texte").innerHTML=xhr_object.responseText;
    }
  }

Voilà c'est le nouveau code. Sur le principe, celà est bon, là où l'on ne conservait pas la deuxième fenêtre, on la conserve.

Mais le problème c'est que le résultat de l'objet xhr est vide En rouge, c'est l'appel que j'ai changé.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
12
bonjour,

>>xhr_object.open("GET", "armes.php?id= " + type, true );
donc... en asynchrone.

il faut donc attendre le retour d'ajax :

xhr_object.onreadystatechange = function()
     {    if ( xhr_object.readyState == 4 )
          {   on peut traiter xhr_object.responseText; }
     }
xhr_object.open("GET", "armes.php?id=" + type, true);

sans préjuger du reste....

Cordialement[mon Site][M'écrire]Bul
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

Je suis désolé Bul3, mais je ne comprends pas tout. Qu'elle est la différence par rapport à mon dernier post avec ce que tu écris ?
Tu me dis d'attendre la réponse d'Ajax, c'est ce que je fais, mais le problème c'est qu'il me retourne un contenu à  vide.

J'ai l'impression d'être un peu pommé là :(
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
12
j'avais mal lu !

dans armes.php fait un bête echo "ce que tu veux";
sans rien d'autres...

et dis nous ce qu'un alert(xhr_object.responseText) affiche
( bien entendu lorsque la réponse est revenenue )
Messages postés
22
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
16 février 2009

alors voici ce que sort armes.php :

<table border="0" cellspacing="0" cellpadding="0"><tr>
<td><img src="images/infobox/infobox_left.gif" width="5" height="23"></td>
<td background="images/infobox/infobox_repeat.gif"><strong><u>Achats d'armes</u></strong></td>
<td>
<img src="images/infobox/infobox_minimize.gif" width="28" height="23" onClick="document.getElementById('pnj_texte').style.display='none'">
</td>
</tr><tr><td></td>
<td><table border="0" cellspacing="2" cellpadding="2" align="center">
<tr><td>Arme</td><td>Impact</td><td>Attaque</td><td>Parade</td><td>Rupture</td><td>Prix</td></tr>
<tr><td><img src="images/armes/IDAGG01.gif" tile="Couteau""></td><td>1D6 + 0</td><td>0</td>
<td>-5</td><td>5</td><td>5</td><td><a href="javascript:buy(1,1);">Acheter</a></td></tr>
<tr><td><img src="images/armes/IDAGG03.gif" tile="Poignard""></td><td>1D6 + 1</td><td>0</td><td>-4</td>
<td>3</td><td>20</td><td><a href="javascript:buy(2,1);">Acheter</a></td></tr>
</table>
</td><td></td></tr></table>

Et l'objet XHR Response Test ne sort rien.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
12
>objet XHR Response Test ne sort rien.

euh.... xhr_object.responseText j'espère ?

mais, ce doit être une erreur de frappe ?
pas de raisons à priori
comment peux-tu dire ce que sort armes.php
si responseText est vide ?
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
12
ah !!!

<tr><td>tile="Poignard""></td><td>1D6 + 1</td><td>0</td><td>-4</td>

ça ne doit pas plaire !
c'est pour ça que je te disais de faire un simple echo
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
12
et pas tout contrôlé... il en reste peut-être !?!