【问题标题】:Display div only once只显示一次 div
【发布时间】:2011-01-23 09:32:18
【问题描述】:

所以我想看起来像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;
}

我想就是这样。希望你能帮帮我。

【问题讨论】:

    标签: javascript jquery message


    【解决方案1】:

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

    我只需要删除它:

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

    我不知道如何解决这个问题,但我会问另一个问题,因为我现在找到了答案!但是感谢心腹和艾伦,花时间尝试回答我

    【讨论】:

      【解决方案2】:

      您正在查询 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);
           });
      }
      

      【讨论】:

      • 嗨。在我设置了变量之后,我调用了函数 checksession(),这样它就显示了消息..我不明白你的意思是我的 javascript 是什么意思是找到消息 div 容器..它没有找到类..我的意思是做随机数“只是”尝试我自己的方法,所以消息会再次出现..
      • 所以消息会再次出现,下次设置时*
      • 我想说的是随机 id 不会改变你的 javascript 的行为,因为 javascript 是通过它的类名来处理消息容器的。
      • 如果 session.php 的答案是“1”,您的 checksession() 会显示消息。当变量 $_SESSION['user_message'] 不存在时,答案只有“1”。您进行此检查的目的是什么?
      • 哦,好吧,是的,正如我所说,我刚刚尝试了 id 方法.. 那我该怎么办?如果 session.php 的答案是 1,那么它的显示消息是对的。如果不是 1,那么什么都没有,然后它应该做 }else{ 消息隐藏。但这与我的问题有什么关系?对不对?
      【解决方案3】:

      问题似乎不是您发布的代码中的错误。我认为变量$_SESSION['user_message'] 在某个时候发生了变化(即删除或设置为空、假或零)。毕竟你正在设置它的值,否则它不会导致isset()首先返回true。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 2021-12-23
        相关资源
        最近更新 更多