Problème de Popup-Tooltip

Résolu
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009 - 13 févr. 2009 à 15:58
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 - 16 févr. 2009 à 11:22
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

cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
16 févr. 2009 à 11:07
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 ...
3
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
13 févr. 2009 à 16:33
Bonjour,

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

Nickadele
0
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 16:45
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'
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
13 févr. 2009 à 17:00
Peut-être y-t-il un problème dans ce que la page php renvoi !?
Une balise mal fermée ou tout autre !?
0

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

Posez votre question
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 17:15
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 ....
0
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 17:22
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.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
13 févr. 2009 à 17:22
Il serait pas là le fautif :
onClick="document.getElementById('texte').style.display='none' "

???
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
13 févr. 2009 à 17:25
Si tu ne dis pas tout.... ;)
As tu regardé avec la console debug Javascript (mozilla) pour situer l'erreur ?
0
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 17:26
Et non j'y avais pensé  J'ai testé en le supprimant mais celà n'a rien changé.
0
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 17:27
Arf, cà il va falloir attendre ce soir chez moi, je te tiens au courant
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
13 févr. 2009 à 17:34
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
0
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 18:56
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;
    }
  }
0
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 20:59
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é.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 14
14 févr. 2009 à 11:13
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
0
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
14 févr. 2009 à 11:38
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à :(
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 14
14 févr. 2009 à 11:51
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 )
0
cs_whiteange Messages postés 22 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 16 février 2009
14 févr. 2009 à 12:40
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.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 14
14 févr. 2009 à 12:59
>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 ?
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 14
14 févr. 2009 à 13:02
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
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 14
14 févr. 2009 à 13:02
et pas tout contrôlé... il en reste peut-être !?!
0