2012-07-17 15 views
7

Il timeout del plug-in di noty Jquery non funziona quando viene alimentato con un elenco di messaggi. Ricevo l'elenco dei messaggi da servlet e richiamo noty in questo modo.noty timeout del plug-in Jquery non sta accadendo

<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 questo dovrebbe scorrere i messaggi e stamparli con un timeout di 5000 ms. Ma questo stampa tutti i messaggi contemporaneamente. Ho provato ulteriormente a utilizzare la funzione setTimeout nativa di javascript e ho sostituito la mia callNotification con questo.

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

Ma anche questo si è rivelato inefficace. Stranamente il timeout sembra funzionare correttamente quando sostituisco "layout":center nel metodo di notifica. Dove sto andando male. Voglio che i messaggi vengano visualizzati con il tempo di 5 secondi dopo il quale il primo messaggio viene cancellato automaticamente e il prossimo si presenta.

+0

Hai mai capire questo? – ashes999

+0

Stai utilizzando il file promise.js? – MaFo

+0

hai provato la chiusura con l'opzione –

risposta

3

Per ottenere questo lavoro ho cambiato il seguente in jquery.noty.js ...

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

a questo ...

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

Noty è codificata in modo che se si dispone di pulsanti il tuo Noty, disabilita il timeout. Non ha senso per me, ma è così.

Questo è il colpevole (linea 62):

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

sufficiente rimuovere this.options.timeout = false; e che non mancherà di tenere il timeout di funzionare se si dispone di un Noty con bottoni.

0

è necessario fornire questa opzione come un parametro: "pulsanti: true"

0

È inoltre possibile raggiungere questo obiettivo specificando questa opzione durante l'inizializzazione

buttons: false 

Maggiori informazioni qui http://ned.im/noty/#/about

0

In il tuo jquery.noty.packaged.js crea una variabile globale denominata "master_self" file. Ora nella riga 103 o 104 deve esserci una riga appena sotto quella linea come segno master_self come auto master_self = self;

Creare ora una funzione nello stesso file:

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

Ora chiamare questa funzione in modo esplicito sulla notifica che si desidera timeout in questo modo solo dopo aver chiamato l'oggetto noty per la creazione di notifica :

autoTimeout(1000); 
2

La mia risposta è per v2.3.7.

Noty restituisce un oggetto javascript, quindi se lo si controlla su firebug facendo console.dir (n), si troveranno tutti i metodi e le proprietà dell'oggetto restituito.

segue imposta 3 secondi Timeout:

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

grazie, mi ha aiutato molto – Nedudi

1

Prova closeWith opzione di timeout con spero che funzionerà bene

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 
        } 
       }); 
Problemi correlati