如果没有打开,则jquery ui对话框页面刷新

时间:2011-07-18 18:38:23

标签: jquery jquery-ui

如果jquery对话框未打开,我正试图创建一个刷新条件。需要新鲜的眼睛,因为它似乎不起作用。代码看起来像这样:

if(!$('#add_note-dialog').dialog("isOpen")) { 
    setTimeout(function() { location.reload() }, 3000);
}

setTimeout函数本身可以正常工作,当我用firebug控制台检查条件时,它显示正确的状态,但是当我把它放在<script>时......它根本不起作用或当我删除“ !”条件,即使对话框关闭,它也会一直刷新。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您问题中的代码基本上等于:

  
      
  • 如果对话框未打开:   
        
    • 在3秒内安排页面刷新。
    •   
  •   

我认为你在寻找:

  
      
  • 每3秒:   
        
    • 如果对话框未打开:   
          
      • 刷新页面。
      •   
    •   
  •   

或者甚至可能:

  
      
  • 自页面加载或自上次关闭对话框以来每隔3秒:   
        
    • 如果对话框未打开:   
          
      • 刷新页面。
      •   
    •   
  •   

可以使用setInterval()实现第一种情况:

window.setInterval(function() {
    if (!$("#add_note-dialog").dialog("isOpen")) { 
        window.location.reload();
    }
}, 3000);

第二种情况有点棘手,因为它需要绑定dialogopendialogclose事件,并跟踪计时器ID,例如与data()。我们也只需要一次性定时器,因为它会触发并刷新页面,或者被取消,所以setTimeout()就足够了:

$(document).ready(function() {
    $("#add_note-dialog")
        // Set initial timer.
        .data("refreshTimer", window.setTimeout(window.location.reload, 3000))
        .dialog({
            /*
             * Your dialog options,
             */
            open: function() {
                // Dialog open, cancel current timer.
                window.clearTimeout($(this).data("refreshTimer"));
            },
            close: function() {
                // Dialog closed, restart timer.
                $(this).data("refreshTimer",
                    window.setTimeout(window.location.reload, 3000));
            }
        });
});

答案 1 :(得分:0)

试试这个:

if($('#add_note-dialog').is(':hidden')) { 
    setTimeout(function() { location.reload() }, 3000);
}