只显示div一次

时间:2010-03-03 20:22:51

标签: javascript jquery message

所以我想看一下像stackoverflow一样的消息在顶部。

现在我已经完成所有配置,但是我遇到了一个问题..消息只显示第一次,第二次没有显示。

我知道为什么,关于每个id的东西必须是唯一的或div中的东西..然后我使用rand(1, 300);(php)它仍然无效。

这是我的代码:

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() - (以防万一你想看到它):

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;
}

我认为就是这样。希望你能帮助我。

3 个答案:

答案 0 :(得分:1)

您正在查询session.php,如果未设置会话变量,则会显示该消息。如果已设置会话变量,则不会显示该消息。

大概是你的会话变量'user_message'将在第一页调用之后的某个地方设置,这样就不会再显示该消息了。我找不到这样的代码。

你的javascript是通过className“msg”/“message2”找到消息div-container - 当用随机数改变那个div的id时,这种行为不会改变。你想用这些随机数来实现什么?你想让msg-container只显示一次吗?

编辑:

首先,尝试使用以下代码。是每次都显示的消息?

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

答案 1 :(得分:0)

问题似乎不是您发布的代码中的错误。我认为变量$_SESSION['user_message']在某些时候发生了变化(即删除或设置为null,false或0)。你 毕竟设置了它的值,否则它不会导致isset()在第一时间返回true。

通过检查浏览器和服务器之间的实际通信来调试此问题可能要容易得多,即使用FireBug或者只是在JS回调的开头添加alert(data)权限。

如果在未显示消息时未收到任何警报,则问题出在您的JS上(即AJAX调用未触发,不返回或永远不会到达其周围的代码)。如果您收到1之外的警报,则问题出在服务器响应中(如果您启用了display_errors,如果它真的坏了,可能会出现一些错误消息。)

我希望你知道你的.msg div会因为你的AJAX处理程序中的回调而自动淡出,.message2是否已经淡出。只要.message2被隐藏,取消隐藏.msg就不会将其恢复(虽然这无法解释为什么div不会通过点击链接重新出现在另一个页面上,输入网址或强制重装)。如果您通过AJAX加载所有内容并且没有任何“真实”URL,则可能会出现问题。

答案 2 :(得分:0)

最后我自己发现了错误,这是checksession()中的timeout()函数; ..它现在就像一个魅力:)

我只需删除它:

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

我不知道如何解决这个问题,但我会在另一个问题中提出问题,因为我现在发现了这个问题!但是感谢henchman和Alan,他们花时间试着回答我。