ASP.NET Ajax - 在两个地方使用jQuery BlockUI;我可以解锁特定的div吗?

时间:2009-10-16 19:41:58

标签: jquery asp.net-ajax blockui

我正在使用jQuery BlockUI插件(v2),因为它会破坏casbah。

对于在页面上发出的每个ASP.NET AJAX请求,我使用InitializeRequest和EndRequest客户端事件分别阻止和取消阻止UI - 这使我可以轻松地抛出“请稍候......”对话。代码如下:

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(EndRequest);
prm.add_initializeRequest(InitializeRequest);
var blockTimer;
var blockTimerFired;

function InitializeRequest(sender, args) {
    blockTimer = setTimeout(blockPage, 100);
    blockTimerFired = false;
}

function EndRequest(sender, args) {
    unblockPage();
}

function unblockPage() {
    // Check if the timer has run yet, and if it hasn't, cancel it
    if (blockTimerFired) {
        document.body.style.cursor = "default";
        $.unblockUI();
    }
    else {
        clearTimeout(blockTimer);
    }
}

function blockPage() {
    document.body.style.cursor = "wait";
    var loadingMessage = '<div style="padding-top:30px;min-height:75px;font-weight:bold;font-size:12pt;"><img align="absmiddle" src="../Images/ajax-loader.gif" /> Please wait...</div>';
    $.blockUI({ centerX: true, centerY: true, css: { backgroundColor: '#ebebeb', color: '#000' }, message: loadingMessage });
    blockTimerFired = true;
}

以上行为正常。但是,在某些情况下,我还使用blockUI(在同一页面上)来创建是/否模态对话框。文档准备就绪时会加载此对话框。

问题是我在 unblockPage()中的 $ .unblockUI()调用似乎会终止这两个对话框。有没有办法我可以轻松地使用$ .unblockUI()来定位特定的div?例如,如果我可以打电话给 $ .unblockUI(“#myYesNoDiv”),那就太好了。

2 个答案:

答案 0 :(得分:4)

我过度复杂了这个问题。

当您使用命令 $。blockUI()时,它首先删除页面上任何现有的blockUI div。我问过我是否可以定位一个特定的div,但一次只有一个div存在于页面上,所以我的问题毫无意义。遗憾!

因此,我所要做的就是给div我检查一个id,然后检查它是否存在于页面上。我能够简化代码来解决我的问题:

新代码:

function unblockPage() {
    // Check if the timer has run yet, and if it hasn't, cancel it
    if ($("#divBlockPage").length > 0) {
        document.body.style.cursor = "default";
        $.unblockUI();
    }
    else {
        clearTimeout(blockTimer);
    }
}

// Blocks page UI.
function blockPage() {
    document.body.style.cursor = "wait";
    var loadingMessage = '<div id="divBlockPage" style="padding-top:30px;min-height:75px;font-weight:bold;font-size:12pt;"><img align="absmiddle" src="../Images/ajax-loader.gif" /> Please wait...</div>';
    $.blockUI({ centerX: true, centerY: true, css: { backgroundColor: '#ebebeb', color: '#000' }, message: loadingMessage });
}

答案 1 :(得分:1)

似乎没有那个选项。看看simplemodal。我在想这些日子里,撼动了casbah。我知道你可能会被封锁,但我想我会提到它。