当提供消息列表时,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>
}
但这也被证明是无效的。奇怪的是,当我在notify方法中替换"layout":center
时,超时似乎正常。我哪里错了。我希望消息显示的时间超过5秒,之后第一条消息会自动删除,下一条消息会显示出来。
答案 0 :(得分: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,这将保持超时工作。
答案 1 :(得分:3)
为了实现这一点,我在jquery.noty.js中更改了以下内容......
self.$bar.delay(self.options.timeout).promise().done(function () {
self.close();
});
到此......
setTimeout(function () {
self.close();
}, self.options.timeout);
答案 2 :(得分:2)
我的回答是针对v2.3.7。
Noty返回一个javascript对象,因此如果你通过执行console.dir(n)在firebug上检查它,你会发现返回对象的所有方法和属性。
以下将设置3秒超时:
var n = noty({text: 'noty - a jquery notification library!'});
n.setTimeout(3000);
答案 3 :(得分: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
}
});
答案 4 :(得分:0)
您需要提供此选项作为参数: “buttons:false”
答案 5 :(得分:0)
答案 6 :(得分:0)
在你的jquery.noty.packaged.js中创建一个名为&#34; master_self&#34;的全局变量。 file.Now 103或104行必须有一行
在该行下面var self = this;
将master_self指定为self master_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);