2010-03-03 10 views
8

그래서 맨 위에있는 메시지와 비슷한 모양의 stackoverflow를 원합니다.div를 한 번만 표시

이제 모든 구성이 완료되었지만 한 가지 문제가 발생했습니다. 두 번째로는 첫 번째 메시지 만 표시됩니다. 두 번째로 나타나지 않습니다.

나는 모든 ID에 대해 뭔가가 고유해야하거나 div에있는 것이어야한다는 것을 안다. 그리고 난 rand(1, 300); (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 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 여기

내 코드입니다 그것도) :

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

그 모든 생각합니다. 당신이 나를 도울 수 있기를 바랍니다.

답변

0

마지막으로 나는 오류 자체를 알아 냈고 checksession() 내부의 timeout() 함수였습니다. .. 지금은 매력처럼 작동합니다 :) 난 그냥이를 제거하는 데 필요한

:

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

나는이 문제를 해결하는 방법을 잘 모릅니다,하지만 난이 지금 대답 찾을 수 있기 때문에 내가 또 다른 질문에 묻습니다! 하지만 고마워 죽이기와 앨런, 내게 대답하려고 시간을내어

1

session.php를 쿼리하고 있으며 세션 변수가 설정되지 않은 경우 메시지가 나타납니다. 세션 변수가 설정되어 있으면 메시지가 나타나지 않습니다.

세션 변수 'user_message'가 첫 페이지 호출 후 어딘가에 설정되어 메시지가 다시 표시되지 않습니다. 나는 그런 코드를 찾을 수 없었다.

javascript가 className "msg"/ "message2"에 의해 메시지 div 컨테이너를 찾고 있습니다.이 동작은 임의 번호가있는 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); 
    }); 
} 
+0

안녕하세요. AFTER 필자는 변수를 설정합니다. fuction checksession()을 호출하면 메시지가 표시됩니다. 자바 스크립트로 메시지 컨테이너를 찾는 것은 이해가 안됩니다 .. 클래스를 찾지 못했습니다. 임의의 숫자는 내 자신의 방법을 시도하기 위해 "그냥"이었으므로 메시지가 다시 나타납니다 .. – Karem

+0

다음에 메시지가 나타나면 메시지가 다시 나타납니다. * – Karem

+0

내가 말하고자하는 것은 임의의 ID가 javascript는 클래스 이름으로 메시지 컨테이너를 처리하기 때문에 javascript의 동작이 다릅니다. –

0

게시 한 코드에 버그가없는 것 같습니다. 변수 $_SESSION['user_message']이 일부 지점에서 변경된 것 같습니다 (즉, 삭제되거나 null, false 또는 0으로 설정 됨). 은 결국 어떤 값으로 설정하면이됩니다. 그렇지 않으면 isset()이 처음으로 true를 반환하지 않습니다.

브라우저와 서버 간의 실제 통신 (예 :)을 확인하거나 JS 콜백 시작 부분에 바로 alert(data)을 추가하면이 문제를 디버그하는 것이 훨씬 쉽습니다.

메시지가 표시되지 않을 때 알림 메시지가 표시되지 않으면 JS에 문제가있는 것입니다. 즉, AJAX 호출이 실행되지 않거나 돌아 오지 않거나 코드가 전달되지 않습니다.1 이외의 알림을 받으면 서버 응답에 문제가있는 것입니다 (display_errors을 사용하는 경우 실제로 손상된 경우 오류 메시지가 표시 될 수 있음).

.message2이 페이드 아웃했는지 여부에 상관없이 .msg div가 AJAX 핸들러의 콜백으로 인해 자동으로 페이드 아웃된다는 사실을 알고 싶습니다. 숨기기 .message2.msg이 숨겨져있는 한 다시 가져 오지 않습니다 (링크를 클릭하거나 URL을 입력하거나 다시로드하여 다른 페이지에 div가 다시 표시되지 않는 이유는 설명하지 않지만). AJAX를 통해 모든 컨텐츠를로드하고 "실제"URL이없는 경우 문제가 될 수 있습니다.