2010-03-03 6 views
8

Donc, je veux faire ressembler un stackoverflow avec le message en haut.Affichage div une seule fois

Maintenant j'ai tout configuré et tel, mais j'ai eu un problème .. Le message affiche seulement 1ère fois, la deuxième fois il n'apparaît pas.

Je sais pourquoi, quelque chose à propos de chaque identifiant doit être unique ou quelque chose dans un div .. Et puis j'ai utilisé rand(1, 300); (php) et ça ne marchera toujours pas.

Voici mon code:

function checkSession(){ 
    $.ajax({url: "session.php", success: function(data){ 
     if(data == 1){ 
      var postFilen = 'msg.php'; 
      $.post(postFilen, function(data){ 
      $(".msg").html(data).find(".message2").fadeIn("slow") 
      setTimeout(function(checkSession) { 
    $('.msg').fadeOut('slow'); 
}, 10000); 
      }); 
     }else{ 
      $('.message2').hide(); 
     } 
    }}); 
// setInterval('checkSession()',1000); 
} 

index.php:

<div class="msg" id="msg" ></div> 

msg.php:

<div class="message2" id="message2" onclick="closeNotice2()" style="display: none"> 
Yo, <b><? echo $pusername; ?></b> - <? echo $_SESSION["user_message"]; ?> 
<a class="close-notify" onclick="closeNotice2()">X</a> 
</div> 

CloseNotice2() - (juste au cas où si vous voulez voir cela aussi):

function closeNotice2() { 
    $(".message2").fadeOut("slow"); 
} 

session.php:

if(isset($_SESSION['user_message'])) { 
echo 1; 
} 

CSS:

.message2 { 
    position: absolute; 
    top: 0; 
    left: 0; 
    z-index: 105; /* Anything higher than 1 will do */ 
    background-color: #034678; 
    font-family: Arial,Helvetica,sans-serif; 
    font-size: 100%; 
    text-align: center; 
    font-weight: bold; 
    border-bottom: 2px solid #FFF; 
    height: 26 px; 
    width: 100%; 
} 
.message2 span { 
    text-align: center; 
    width: 95%; 
    float:left; 
} 

Je pense que c'est tout. J'espère que vous pouvez m'aider.

Répondre

0

Enfin, j'ai découvert l'erreur moi-même, et c'était la fonction timeout(), à l'intérieur de la checksession(); .. Il fonctionne comme un charme maintenant :)

Je avais juste besoin de supprimer ce:

setTimeout(function() { 
    $('.msg').fadeOut('slow'); 
     }, 5000); 

Je ne sais pas comment résoudre ce problème, mais je vais poser une autre question parce que je trouve une réponse à maintenant! Mais merci, Henchman et Alan, de prendre votre temps pour essayer de me répondre

1

Vous interrogez session.php, et si la variable de session n'a pas été définie, le message apparaîtra. Si la variable de session a été définie, le message n'apparaîtra pas. Il est probable que votre variable de session 'user_message' sera définie quelque part après l'appel de la première page, de sorte que le message ne sera plus affiché. Je ne pouvais pas trouver un tel code.

votre javascript trouve le message div-container par className "msg"/"message2" - ce comportement n'est pas modifié lors de la modification de l'identifiant de cette div avec des nombres aléatoires. Que voulez-vous réaliser en utilisant ces nombres aléatoires? Souhaitez-vous que le conteneur msg affiche plus d'une fois?

modifier:

d'abord, essayez d'utiliser le code suivant. le message est-il maintenant affiché à chaque fois?

function checkSession(){ 
    var postFilen = 'msg.php'; 
    $.post(postFilen, function(data){ 
      $(".msg").html(data).find(".message2").fadeIn("slow") 
      setTimeout(function(checkSession) { 
      $('.msg').fadeOut('slow'); 
      }, 10000); 
    }); 
} 
+0

Salut. AFter ive définir la variable, im appelant la fession checksession(), de cette façon, il affiche le message .. je ne comprends pas ce que vous voulez dire avec mon javascript est de trouver le conteneur conteneur div .. ne trouve pas la classe .. et mon point de faire Les nombres aléatoires étaient "juste" pour essayer ma propre méthode, ainsi le message apparaîtra à nouveau .. – Karem

+0

Ainsi le message apparaîtra encore, quand il sera placé la prochaine fois * – Karem

+0

Ce que j'ai voulu dire c'est que les identifiants aléatoires ne changeront pas le comportement de votre javascript, car le javascript gère le conteneur de messages par son nom de classe. –

0

Le problème ne semble pas être un bogue dans le code que vous avez publié. Je pense que la variable $_SESSION['user_message'] a changé à un certain point (c'est-à-dire supprimé ou mis à null, faux ou zéro). Vous définissez sa valeur à un certain point après tout, sinon cela ne donnera pas isset() retournant vrai en premier lieu. Il est probablement beaucoup plus facile de déboguer ce problème en vérifiant la communication réelle entre votre navigateur et votre serveur, c'est-à-dire en utilisant FireBug ou en ajoutant simplement un alert(data) au début du rappel JS.

Si vous n'obtenez aucune alerte lorsque le message n'est pas affiché, le problème provient de votre JS (l'appel AJAX ne se déclenche pas, ne retourne pas ou le code qui l'entoure n'est jamais atteint).Si vous obtenez une alerte avec autre chose que 1, le problème est dans la réponse du serveur (si vous avez display_errors activé, il y aura probablement un message d'erreur si c'est vraiment cassé).

J'espère que vous êtes conscient que votre div .msg est en train de disparaître automatiquement à cause du rappel dans votre gestionnaire AJAX, que le .message2 soit déjà éteint ou non. Unhiding .message2 ne le ramènera pas tant que .msg est caché (bien que cela n'expliquera pas pourquoi le div ne réapparaît pas sur une autre page chargée en cliquant sur un lien, en entrant une URL ou en forçant un rechargement). Cela peut poser un problème si vous chargez tout le contenu via AJAX et n'avez pas de "vrai" URL, cependant.