2013-05-07 161 views
0

我打算使用jquery-ui实现交互式取消按钮对话框。当用户点击取消时,它会弹出确认对话框。当用户点击是时,它将根据响应状态进行响应。这是我如何实现代码。jquery ui对话框意外关闭

function refreshPage() { 
window.location.reload(true); 
} 

$(function() { 
setTimeout(refreshPage,30000); 

var cancelJob = function(e) { 
    e.preventDefault(); 
    $('.hiddenCancelPopup').dialog({ 
     modal: true, 
     buttons: { 
      "Yes": function() { 
       var bookingJobNo = $('.cancelButton').attr("rel"); 
       var channel = $('.cancelButton').attr("channel"); 
       var deviceId = $('.cancelButton').attr("deviceId"); 
       if(readCookie("mbtx_session_id") == null) { 
        $(".invalidId").dialog({}); 
        return; 
       } 
       jQuery.get('/rest/v2/booking/cancel/'+ bookingJobNo + "?channel=" + channel + "&deviceId=" + deviceId, function(result) { 
        if(result.status == 501) { 
         $(".hiddenCancelledPopup").dialog({ 
          modal: true, 
          buttons: { 
           "OK": function() { 
            alert("OK"); 
            window.location.reload(true); 
            //$(this).dialog("close"); 
           } 
          } 
         }); 
        } else { 
         $(".hiddenFailedCancelPopup").dialog({ 
          modal: true, 
          buttons: { 
           "OK": function() { 
            $(this).dialog("close"); 
           } 
          } 
         }); 
        } 
       }); 
      }, 
      "No": function() { 
       $(this).dialog("close"); 
      } 
     } 
    }); 
} 

$(".cancelButton").on('click',cancelJob); 

$("body").on({ 
    ajaxStart: function(cancelJob) { 
     $(this).addClass("loading"); 
    }, 
    ajaxStop: function(cancelJob) { 
     $(this).removeClass("loading"); 
     refreshPage(); 
    } 
}); 

这个实现的问题是,在显示$(".hiddenCancelledPopup").dialog,对话框意外关闭用户点击按钮OK甚至之前。它显示了一段时间后才消失。

我意识到setTimeout(refreshPage,30000);(意思是每30秒刷新一次)可能会导致问题,但我发现对话在30秒之前关闭的时间更短。任何想法如何解决这个问题?谢谢。

+2

向'refreshPage'添加一个提醒以确保。 – Barmar 2013-05-07 04:44:03

回答

1

通过窥视你的代码,我怀疑问题是当你的ajax调用停止。即在您的代码的这一部分。

$("body").on({ 
ajaxStart: function(cancelJob) { 
    $(this).addClass("loading"); 
}, 
ajaxStop: function(cancelJob) { 
    $(this).removeClass("loading"); 
    refreshPage(); //page refreshes after any ajax call stops after executing. 
} 
}); 

大概是什么情况是带班hiddenCancelledPopup威力您的UI对话框出现,但之前,你甚至按下OK里面的代码ajaxStop功能火灾,它刷新为你调用refreshPage()里面的页面,让您的弹出你面前消失甚至做一些事情。

我不知道你背后的核心要求,但我对你的建议是,在其他地方叫refreshPage()函数。请使用fiddle更新您的问题以使其更清晰。

+0

谢谢。这回答了这个问题。 – snowball147 2013-05-07 06:22:00