2010-03-03 17 views
8

Así que quiero hacer un lookoverflow similar al mensaje en la parte superior.Mostrar div solo una vez

Ahora tengo todo configurado y tal, pero tengo un problema .. El mensaje solo se muestra la primera vez, la segunda vez no aparece.

Sé por qué, algo sobre cada identificación debe ser único o algo en un div ... Y luego he usado rand(1, 300); (php) y todavía no va a funcionar.

Aquí está mi códigos:

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() - (sólo en el caso si usted quiere ver eso también):

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

creo que eso es todo. Espero me puedas ayudar.

Respuesta

0

Finalmente descubrí el error yo mismo, y fue la función timeout(), dentro de la sesión de verificación(); .. Funciona como un encanto ahora :)

solo necesitaba eliminar esta:

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

No sé cómo solucionar este problema, pero voy a preguntar en otra pregunta porque me parece que este respondió ahora! Pero gracias secuaz y Alan, por tomarse su tiempo para tratar de responderme

1

está consultando session.php, y si la variable de sesión no se configuró, aparecerá el mensaje. si la variable de sesión se ha configurado, el mensaje no aparecerá.

presumiblemente su variable de sesión 'user_message' se establecerá en algún lugar después de la primera llamada de la página, por lo que el mensaje no se mostrará de nuevo. No pude encontrar ese código.

tu javascript está buscando el mensaje div-container por className "msg"/"message2" - este comportamiento no se altera cuando se cambia la identificación de ese div con números aleatorios. ¿Qué quieres lograr usando estos números aleatorios? ¿Le gustaría que el contenedor de mensajes se muestre más de una vez?

edición:

en primer lugar, tratar de utilizar el siguiente código. es el mensaje que ahora se muestra todo el tiempo?

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

Hola. Después de establecer la variable, llamo a la sesión de comprobación de fuction(), de esa manera muestra el mensaje ... no entiendo lo que quieres decir con mi javascript es encontrar el contenedor div mensaje ... no encuentra la clase ... y mi punto de vista los números aleatorios eran "solo" para probar mi propio método, por lo que el mensaje aparecerá de nuevo. – Karem

+0

Así que el mensaje aparecerá de nuevo, cuando se configure la próxima vez * – Karem

+0

Lo que pretendía decir es que los identificadores aleatorios no cambiarán el comportamiento de su javascript, porque el javascript está manejando el contenedor de mensajes por su nombre de clase. –

0

El problema no parece ser un error en el código que ha publicado. Creo que la variable $_SESSION['user_message'] cambió en algún momento (es decir, eliminada o configurada en nulo, falso o cero). Usted es estableciendo su valor en algún momento después de todo, de lo contrario no resultaría en isset() que devuelva verdadero en primer lugar.

Probablemente sea mucho más fácil solucionar este problema comprobando la comunicación real entre su navegador y su servidor, es decir, usando FireBug o simplemente agregando un alert(data) justo al comienzo de la devolución de llamada JS.

Si no recibe ninguna alerta cuando el mensaje no se muestra, el problema es con su JS (es decir, la llamada AJAX no se activa, no se devuelve o el código que lo rodea nunca se alcanza).Si recibe una alerta con algo que no sea 1, el problema está en la respuesta del servidor (si tiene habilitado display_errors, es probable que haya algún mensaje de error si realmente está roto).

Espero que sepa que su div .msg se desvanece automáticamente debido a la devolución de llamada en su controlador AJAX, ya sea que .message2 se haya desvanecido o no. La ocultación de .message2 no la devolverá mientras esté oculto .msg (aunque eso no explicará por qué el div no vuelve a aparecer en otra página cargada al hacer clic en un enlace, ingresar una URL o forzar una recarga). Esto puede ser un problema si está cargando todo el contenido a través de AJAX y no tiene ninguna URL "real".

Cuestiones relacionadas