【问题标题】:jGrowl - limit to a single messagejGrowl - 限制为单个消息
【发布时间】:2012-06-27 16:54:40
【问题描述】:

我正在使用 jGrowl 来显示消息和警报,我使用的日期选择器会连续三次触发 .change() 函数,这意味着每次选择日期/时间时都会显示三条消息,我'希望将其限制为一个。

我试过$.jGrowl.defaults.pool = 1;但不幸的是这只会导致消息堆叠,而不是实际上只显示一条消息。

这是我正在使用的代码,尽管进行了检查,但目前它仍然显示 3 条消息:

if($('.jGrowl-notification').length == 0) {
    jGrowl('message');
} else {
    if ( $('.jGrowl-notification').not(':visible') ) {
        jGrowl('message');
    }
}

(第一次显示消息时,创建.jGrowl-notification div,然后在消息超时时隐藏)

任何帮助将不胜感激,谢谢

【问题讨论】:

  • 你能在 jsfiddle.net 上做一个演示吗?另外,您使用的是哪个日期选择器?
  • 查看 jGrowl 代码,传递给启动的元素有一个 data() 属性,其中包含一些东西,并且通知数组在那里:$(e).data('jGrowl.instance').notifications。值得看看使用它来确定通知是否已经排队?

标签: jquery jgrowl


【解决方案1】:

可以尝试类似(未经测试)

jGrowl('message',{beforeOpen: function() {
    if($('.jGrowl-notification').is(':visible')) {
       return false;
   }
 }
});

jGrowl 查看 beforeOpen 和 beforeClose 的返回语句,返回 false 会停止它继续。

另一种可能的方法是记录是否像这样针对该输入打开咆哮。

$('#yourPicker').change(function() {
   if($(this).data('hasExisting') == 0) {
    jGrowl('message',{
        open: function() {
                $('#yourPicker').data('hasExisting',1);
        },
        close: function() {
                $('#yourPicker').data('hasExisting',0);
        }
        });
   }
});

这种方式会在输入中存储一个值,以确定当前是否有咆哮声在它尝试排队之前对其打开。

【讨论】:

  • @Nick 对此遮阳篷有任何反馈吗?
  • 嗨,很抱歉回复晚了 - 这看起来很完美!非常感谢您抽出宝贵时间来做这件事,我使用单声道主题 (webstuffshare.com/2010/01/jgrowl-theme-mono-basic),所以还没有机会实施这些更改,因为它可能需要一些麻烦,而且我很忙工作,但您的总体想法/解决方案是正确的,所以再次感谢您! :)
猜你喜欢
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2019-12-30
  • 1970-01-01
  • 2010-11-05
  • 2014-01-10
相关资源
最近更新 更多