0

我正在使用 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") 那就太好了。

4

2 回答 2

4

我把这个问题复杂化了。

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

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

新代码:

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 });
}
于 2009-10-18T22:03:31.570 回答
1

好像没有那个选项。看看simplemodal。我想几天我自己都在摇晃卡斯巴。我知道您可能与 blockui 有关,但我想我会提到它。

于 2009-10-16T23:51:33.777 回答