Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

noty Jquery plugin timeout not happening

The Jquery noty plugin timeout is not working when fed with a list of messages. I get the list of messages from servlet and call noty like this.

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

Ideally this should loop over the messages and print them with a timeout of 5000ms. But this prints all of the messages at once. I further tried to use the javascript native setTimeout function and replaced my callNotification with this.

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

But this also proved ineffective. Strangely the timeout seems to work fine when I replace "layout":center in notify method. Where am I going wrong. I want the messages to be displayed with the time out of 5 seconds after which the first message gets automatically erased and the next shows up.

like image 345
Rohit Kumar Avatar asked Jul 17 '12 14:07

Rohit Kumar


3 Answers

Noty is coded so that if you have buttons in your Noty, it disables the timeout. That doesn't make sense to me, but that's how it is.

This is the culprit (line 62):

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

Just remove this.options.timeout = false; and that will keep the timeout working if you have a Noty with buttons.

like image 61
Gavin Avatar answered Nov 12 '22 06:11

Gavin


To get this working I changed the following in jquery.noty.js ...

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

to this ...

setTimeout(function () {
                self.close();
            }, self.options.timeout);
like image 42
BuiltByPeter Avatar answered Nov 12 '22 06:11

BuiltByPeter


My answer is for v2.3.7.

Noty returns a javascript object, hence if you check it on firebug by doing console.dir(n), you will find all the methods and properties of the returned object.

Following will set 3 seconds timeout:

var n = noty({text: 'noty - a jquery notification library!'});
n.setTimeout(3000);
like image 37
Aemal Sayer Avatar answered Nov 12 '22 06:11

Aemal Sayer