Blockui над модальным диалогом jQueryUI
Я не могу заставить 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="#" onclick="location.href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/themes/base/jquery-ui.css'; return false;" 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>
Любая идея?
Ответы
Ответ 1
Вы не указали, что вы пробовали с z-index.
Плагин blockUI имеет возможность изменить z-индекс создаваемого сообщения (документация):
// z-index for the blocking overlay
baseZ: 1000,
jQuery UI Dialog как опция для указания z-индекса. Его значение по умолчанию - 1000. Таким образом, вы должны установить большее число для опции BlockUI, скажем 2000:
$.blockUI({
theme: true,
baseZ: 2000
})
DEMO
Ответ 2
Спасибо Дидье за ваш ответ, это помогло мне на ходу. Вы заметите, что ответ jsfiddle в ответ Дидье работает при первом открытии диалога, но любые дальнейшие открытые и ajax результаты в элементах blockUI появляются под диалогом. Диалог должен перекалибровать его z-index как верхнюю собаку при каждом открытии.
Я нашел два возможных способа:
- 'destroy' диалог, когда он закрыт, и воссоздать его, когда
он открывается.
-
а не блокировать весь пользовательский интерфейс, просто заблокируйте
Диалог. Это можно сделать с помощью метода виджетов например:
$( ".selector" ).dialog( "widget" ).block({
theme: false,
message: '<h1>Wait for me please...</h1>',
css: { border: '3px solid #a00' }
});