阻止jQueryUI模式对话框

时间:2012-02-19 22:30:51

标签: jquery-ui dialog blockui

我不能让BlockUI在模态对话框上工作 我试图照顾z-index问题,但没有成功......

在我的网页中,这是头部:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" ></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js" ></script>
<script type="text/javascript" src="http://jquery.malsup.com/block/jquery.blockUI.js?v2.38" ></script>
<link media="all" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/themes/base/jquery-ui.css" rel="stylesheet" />

和身体:

<div id="dialog_test" title="Test">
    TEST
</div>

<a href="#" id="go">GO</a>

<script>
    $(function() {
        $( "#dialog_test" ).dialog({
            autoOpen: false,
            modal: true,
            buttons: {
                "Cancel": function() {
                    $( this ).dialog( "close" );
                },
                "Ajax": function() {
                    $.ajax({
                        "url" : "http://jquery.malsup.com/block/wait.php",
                        "success" : function(json) {
                            $( "#dialog_test" ).dialog( "close" );
                        }
                    });
                }
            }
        });

        $( "#go" ).click(function(event) {
            event.preventDefault();
            $( "#dialog_test" ).dialog( "open" );
        });

    });

    $(document)
        .ajaxStart(function() {
            $.blockUI({
                theme: true
            })
        })
        .ajaxStop($.unblockUI);

</script>

有什么想法吗?

2 个答案:

答案 0 :(得分:45)

您没有使用z-index指定您尝试过的内容。

blockUI插件有一个选项可以更改它创建的消息的z-index(documentation):

// z-index for the blocking overlay 
baseZ: 1000,

jQuery UI对话框也是option for specifying a z-index。它的默认值是1000.所以你必须为BlockUI选项设置一个更高的数字,让我们说2000:

$.blockUI({
    theme: true,
    baseZ: 2000
})

<强> DEMO

答案 1 :(得分:2)

感谢迪迪埃的回答,这有助于我走上正轨。您会注意到Didier的答案中的jsfiddle在您第一次打开对话框时工作,但任何进一步打开和ajax会导致blockUI元素出现在对话框下方。每次打开时,对话框必须重新校准它的z-index为最佳狗。

我找到了两种可能的方法:

  1. 'destroy'关闭时的对话框,并在何时重新创建 它被打开了。
  2. 而不是阻止整个UI,只是阻止 对话。这可以使用widget method来完成,如下所示:

    $( ".selector" ).dialog( "widget" ).block({ 
        theme: false,
        message: '<h1>Wait for me please...</h1>', 
        css: { border: '3px solid #a00' } 
    });