0

在寻找解决方案以在没有按钮的情况下隐藏通知栏 oncomplete XX.hide()

我找到了一个 javascript

<script type="text/javascript">
          jQuery(function() {
          bar.show();
          setTimeout("bar.hide()",5000);
           });
         </script>

当我把这段代码放在之后</p:notificationBar>

但我的问题是我想在执行我的方法后显示通知,并在 5 秒后隐藏这个组件。但我不知道我把这个 javascrpit 称为oncomplete所以我复制了两行这是我的代码

<p:commandButton value="Run" action="#{optionBean.updateParametre()}" oncomplete="bar.show(),setTimeout(bar.hide(),50000);" update="panel"/>
    <p:notificationBar position="bottom" effect="fade" widgetVar="bar"  > 
    <f:facet name="close">  
            <p:graphicImage value="/resources/image/closebar.png" />  
        </f:facet>  
    <h:outputText value="Parametre Enregistre !" style="color:#FFCC00;font-size:36px;" />  
</p:notificationBar> 

问题是,notifationBar 会在固定时间迅速消失!!!为什么

4

3 回答 3

2

尝试这个

jQuery(function(){

     bar.show().delay(5000).hide();

});
于 2013-06-14T16:14:42.753 回答
2

你可以试试这个:

jQuery(function() {
  bar.show();
  setTimeout(function(){ bar.hide(); },5000);
});

您可以实现的另一种方法是添加一个缓慢淡出的切换,我认为 5 秒是查看通知的缓慢时间。

于 2013-06-14T16:07:35.930 回答
2

您调用 setTimeout 的方式存在细微差别,这一切都不同。

相比

  • setTimeout("bar.hide()",5000);
  • setTimeout(bar.hide(),50000)

除了数量级的差异外,bar.hide()在顶部引用,在底部不引用。当您将字符串文字传递给 setTimeout时,它们会eval在超时发生时出现。

在第二种情况下,bar.hide()未引用。发生的事情是bar.hide()在创建超时时立即调用,并且hide在超时发生时调用函数的返回值。

解决此问题的最简单方法是将您的 oncomplete 属性修改为

oncomplete="bar.show(),setTimeout('bar.hide()',50000);"

有个更好的方法。jQuery 可以使用 链接这样的效果delay,但是其他人已经给出了答案,所以我不会在这里重复。

于 2013-06-14T16:45:44.000 回答