2012-07-17 11 views
7

El tiempo de espera del plugin Jquery noty no funciona cuando se lo alimenta con una lista de mensajes. Obtengo la lista de mensajes de servlet y call noty como este.noty El tiempo de espera del complemento Jquery no ocurre

<script> 
    function callNotification() 
    { 
     <c:foreach var = "message" items = "${sessionScope.notification}"> 
      notify('${message}'); 
     </c:foreach> 
    } 
    function notify(message) 
    { 
     noty({ 
       "text": message, 
       "theme": noty_theme_facebook", 
       "layout": topRight, 
       "information","animateOpen":{"height":"toggle"}, 
       "information","animateOpen":{"height":"toggle"}, 
       "speed":500, 
       "timeout":5000, 
       "closeButton":true, 
       "closeOnSelfClick":true, 
       "closeOnSelfOver":false, 
       "modal":false 
      }) 
    </script> 

Idealmente, esto debería recorrer los mensajes e imprimirlos con un tiempo de espera de 5000ms. Pero esto imprime todos los mensajes a la vez. Además, traté de usar la función setTimeout nativa de javascript y reemplacé mi callNotification con esto.

function callNotification() 
    { 
     <c:foreach var = "message" items = "${sessionScope.notification}"> 
     (function(message){ 
      setTimeout(function(){notify('${message}');},5000) 
     }('${message}') 
     }} 
     </c:foreach> 
    } 

Pero esto también demostró ser ineficaz. Curiosamente, el tiempo de espera parece funcionar bien cuando reemplazo "layout":center en el método de notificación. ¿Dónde estoy equivocado? Quiero que los mensajes se muestren con el tiempo de 5 segundos después del cual el primer mensaje se borra automáticamente y aparece el siguiente.

+0

¿Alguna vez resolver esto? – ashes999

+0

¿Está utilizando el archivo promise.js? – MaFo

+0

has probado el cierre con la opción –

Respuesta

3

Para conseguir este trabajo me cambió la siguiente en jquery.noty.js ...

self.$bar.delay(self.options.timeout).promise().done(function() { 
       self.close(); 
      }); 

a este ...

setTimeout(function() { 
       self.close(); 
      }, self.options.timeout); 
8

Noty se codifica de manera que si tiene botones de su Noty, desactiva el tiempo de espera. Eso no tiene sentido para mí, pero así es como es.

Este es el culpable (línea 62):

60: // If we have button disable closeWith & timeout options 
61: this.options.closeWith = []; 
62: this.options.timeout = false; 

Basta con retirar this.options.timeout = false; y que mantendrá el tiempo de espera de trabajo si tiene un Noty con botones.

0

es necesario proporcionar esta opción como un parámetro: "botones: true"

0

También puede lograr esto mediante la especificación de esta opción durante la inicialización

buttons: false 

Más aquí http://ned.im/noty/#/about

0

En su jquery.noty.packaged.js crea una variable global llamada archivo "master_self". Ahora en la línea 103 o 104 debe haber una línea var self = this; justo debajo de esa línea como firmar master_self como auto master_self = self;

A continuación, cree una función en el mismo archivo:

function autoTimeout(timeoutVal){ 
    setTimeout(function(){ 
          var self = master_self; 
          if (typeof self.options.animation.close == 'string') { 
           self.$bar.addClass(self.options.animation.close).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() { 
            if(self.options.callback.afterClose) self.options.callback.afterClose.apply(self); 
            console.log(self); 
            self.closeCleanUp(); 
           }); 
          } else { 
           self.$bar.clearQueue().stop().animate(
            self.options.animation.close, 
            self.options.animation.speed, 
            self.options.animation.easing, 
            function() { 
             if(self.options.callback.afterClose) self.options.callback.afterClose.apply(self); 
            }) 
            .promise().done(function() { 
             self.closeCleanUp(); 
            }); 
          } 
         },timeoutVal); 
} 

Ahora llama a esta función explícitamente en la notificación que desea el tiempo de espera de esta forma solo después de llamar al objeto noty para la creación de la notificación :

autoTimeout(1000); 
2

Mi respuesta es para v2.3.7.

Noty devuelve un objeto javascript, por lo tanto, si lo comprueba en firebug haciendo console.dir (n), encontrará todos los métodos y propiedades del objeto devuelto.

siguiente configurará 3 segundos de tiempo de espera:

var n = noty({text: 'noty - a jquery notification library!'}); 
n.setTimeout(3000); 
+0

gracias, me han ayudado mucho – Nedudi

1

Trate closeWith con la opción de tiempo de espera espero que no tendrán ningún problema

function generate(type, text) { 

       var n = noty({ 
        text  : text, 
        type  : type, 
        dismissQueue: true, 
        layout  : 'topRight', 
        closeWith : ['click','timeout'], 
        theme  : 'relax', 
        maxVisible : 10, 
        timeout  :7000, 

        animation : { 
         open : 'animated bounceInRight', 
         close : 'animated bounceOutRight', 
         easing: 'swing', 
         speed : 500 
        } 
       }); 
Cuestiones relacionadas