javascript settimeout有什么问题

时间:2013-06-14 16:05:50

标签: javascript jquery primefaces

搜索隐藏notificationBar的解决方案后,没有按钮oncomplete XX.hide()

我找到了一个javascript

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

当我在</p:notificationBar>

之后放置此代码时,它的工作正常

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

<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在固定时间内快速消失!!!为什么

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

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

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

答案 1 :(得分:2)

试试这个

jQuery(function(){

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

});

答案 2 :(得分:2)

你调用setTimeout的方式有一个细微的差别,这会产生重大影响。

比较

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

除了数量级差异之外,bar.hide()引用在顶部,引用在底部。当你pass string literals to setTimeout时,超时发生时它们是eval

在第二个实例中,bar.hide()未加引号。发生的事情是在创建超时时立即调用bar.hide(),并在超时发生时调用hide函数的返回值。

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

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

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