2010-03-03 37 views
8

Vì vậy, tôi muốn thực hiện một luồng xếp chồng như vậy với thông báo ở trên cùng.Chỉ hiển thị div một lần

Bây giờ tôi đã cấu hình xong, nhưng tôi gặp một vấn đề .. Thông báo chỉ hiển thị lần thứ nhất, lần thứ hai nó không xuất hiện.

Tôi biết tại sao, một cái gì đó về mọi id phải là duy nhất hoặc một cái gì đó trong một div .. Và sau đó tôi đã sử dụng rand(1, 300); (php) và nó vẫn sẽ không hoạt động.

Dưới đây là mã của tôi:

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() - (chỉ trong trường hợp nếu bạn muốn xem cũng vậy):

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

Tôi nghĩ rằng đó là tất cả. Hy vọng bạn có thể giúp tôi ra ngoài.

Trả lời

0

Cuối cùng tôi đã tự tìm ra lỗi và đó là hàm timeout(), bên trong kiểm tra(); .. Nó hoạt động như một nét duyên dáng bây giờ :)

Tôi chỉ cần thiết để loại bỏ điều này:

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

Tôi không biết làm thế nào để khắc phục điều này, nhưng tôi sẽ hỏi trong một câu hỏi khác, vì tôi tìm thấy điều này đã trả lời bây giờ! Nhưng cảm ơn tay sai và Alan, vì đã dành thời gian của bạn để cố gắng trả lời tôi

1

bạn đang truy vấn session.php và nếu biến phiên không được đặt, thông báo sẽ xuất hiện. nếu biến phiên đã được đặt, thông báo sẽ không xuất hiện.

có lẽ biến phiên của bạn 'user_message' sẽ được đặt ở đâu đó sau cuộc gọi trang đầu tiên, để thông báo sẽ không được hiển thị lại. tôi không thể tìm thấy mã như vậy.

javascript của bạn đang tìm thư div-container bởi className "msg"/"message2" - hành vi này không bị thay đổi khi thay đổi id của div đó bằng các số ngẫu nhiên. bạn muốn đạt được điều gì khi sử dụng những con số ngẫu nhiên này? bạn có muốn msg-container hiển thị nhiều hơn một lần không?

chỉnh sửa:

trước tiên, hãy thử sử dụng mã sau đây. tin nhắn hiện có hiển thị mọi lúc không?

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

Xin chào. AFter ive đặt biến, im gọi fession checksession(), theo cách đó nó hiển thị thông báo .. tôi không hiểu ý bạn là gì với javascript của tôi là tìm tin nhắn div container .. doesnt nó tìm thấy các lớp .. và điểm của tôi làm số ngẫu nhiên là "chỉ" để thử phương pháp của riêng tôi, do đó, thông báo sẽ xuất hiện trở lại .. – Karem

+0

Vì vậy, thông báo sẽ xuất hiện trở lại, khi nó được giải quyết lần sau * – Karem

+0

Điều tôi định nói là các id ngẫu nhiên sẽ không thay đổi hành vi của javascript của bạn, bởi vì javascript đang xử lý vùng chứa thư theo tên lớp của nó. –

0

Sự cố dường như không phải là lỗi trong mã bạn đã đăng. Tôi nghĩ biến số $_SESSION['user_message'] đã thay đổi tại một số điểm (tức là đã bị xóa hoặc được đặt thành không, sai hoặc không). Bạn đặt giá trị của nó tại một số điểm sau khi tất cả, nếu không nó sẽ không dẫn đến isset() trả về true ngay từ đầu. Có thể dễ dàng hơn nhiều để gỡ lỗi vấn đề này bằng cách kiểm tra giao tiếp thực tế giữa trình duyệt và máy chủ của bạn, tức là sử dụng FireBug hoặc chỉ thêm alert(data) ngay vào đầu cuộc gọi lại JS.

Nếu bạn không nhận được bất kỳ cảnh báo nào khi thông báo không được hiển thị, vấn đề là với JS của bạn (tức là cuộc gọi AJAX không kích hoạt, không trả lại hoặc mã xung quanh nó không bao giờ được tiếp cận).Nếu bạn nhận được một cảnh báo với một cái gì đó khác hơn 1, sự cố là trong phản hồi của máy chủ (nếu bạn đã bật display_errors, có thể sẽ có một số thông báo lỗi nếu nó thực sự bị hỏng).

Tôi hy vọng bạn biết rằng .msg div của bạn tự động bị mờ dần do cuộc gọi lại trong trình xử lý AJAX của bạn, cho dù .message2 có bị mờ hay không. Bỏ ẩn .message2 sẽ không mang lại cho nó miễn là .msg bị ẩn (mặc dù điều đó sẽ không giải thích tại sao div không xuất hiện lại trên một trang khác được tải bằng cách nhấp vào liên kết, nhập URL hoặc buộc tải lại). Điều này có thể là một vấn đề nếu bạn đang tải tất cả nội dung thông qua AJAX và không có bất kỳ URL "thực" nào.

Các vấn đề liên quan