7

当输入消息列表时,Jquery noty 插件超时不起作用。我从 servlet 获取消息列表并像这样调用 noty。

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

理想情况下,这应该遍历消息并以 5000 毫秒的超时时间打印它们。但这会一次打印所有消息。我进一步尝试使用 javascript 本机 setTimeout 函数并用它替换了我的 callNotification。

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

但这也被证明是无效的。"layout":center奇怪的是,当我在通知方法中替换时,超时似乎工作正常。我哪里错了。我希望在 5 秒后显示消息,然后自动删除第一条消息并显示下一条消息。

4

7 回答 7

8

Noty 被编码,因此如果您的 Noty 中有按钮,它会禁用超时。这对我来说没有意义,但事实就是如此。

这是罪魁祸首(第 62 行):

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

只需删除this.options.timeout = false;,如果您有一个带按钮的 Noty,这将保持超时工作。

于 2013-08-23T13:53:24.297 回答
3

为了让它工作,我在 jquery.noty.js 中更改了以下内容......

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

对此...

setTimeout(function () {
                self.close();
            }, self.options.timeout);
于 2013-07-11T19:28:46.327 回答
2

尝试closeWith使用超时选项希望它能正常工作

   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
                    }
                });
于 2016-02-24T12:27:39.803 回答
2

我的答案是针对 v2.3.7。

Noty 返回一个 javascript 对象,因此如果您通过执行 console.dir(n) 在 firebug 上检查它,您将找到返回对象的所有方法和属性。

以下将设置 3 秒超时:

var n = noty({text: 'noty - a jquery notification library!'});
n.setTimeout(3000);
于 2015-12-22T23:30:00.810 回答
0

您需要提供此选项作为参数:“buttons: false”

于 2015-03-31T06:59:00.620 回答
0

您也可以通过在初始化期间指定此选项来实现此目的

buttons: false

更多在这里http://ned.im/noty/#/about

于 2015-04-11T10:53:49.557 回答
0

在您的 jquery.noty.packaged.js 中创建一个名为“master_self”的全局变量文件。现在在第 103 或 104 行中,必须在该行的 var self = this;下方有一行将 master_self 分配为 selfmaster_self = self;

现在在同一个文件中创建一个函数:

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

现在,在调用 noty 对象以创建通知之后,立即在要以这种方式超时的通知上显式调用此函数:

autoTimeout(1000);
于 2015-09-08T10:54:20.450 回答