Один из моих диалогов jQuery определен в div, который имеет фиксированную позицию (нижний колонтитул страницы). Когда открывается модальное диалоговое окно jQuery, jQuery создает оверлейный div, который скрывает всю страницу, а затем помещает открываемый диалог сверху, имея более высокий z-индекс, чем оверлейный div. К сожалению, любой диалог, отображаемый в div с фиксированной позицией, перекрывается оверлейным div, хотя открываемый модальный диалог получил больший z-индекс, чем сам оверлей.
Следующий HTML-код, который я уменьшил в демонстрационных целях до проблемы, показывает разницу между диалогом внутри нефиксированной позиции div и внутри фиксированной позиции div:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="text/css" rel="stylesheet" href="/demo-webapp/faces/javax.faces.resource/themes/sam/theme.css?ln=primefaces&amp;v=2.2.1" />
<link type="text/css" rel="stylesheet" href="/demo-webapp/faces/javax.faces.resource/jquery/ui/jquery-ui.css?ln=primefaces&v=2.2.1" />
<title>CSS TEST</title><script type="text/javascript" src="/demo-webapp/faces/javax.faces.resource/jquery/jquery.js?ln=primefaces&v=2.2.1"></script><script type="text/javascript" src="/demo-webapp/faces/javax.faces.resource/jquery/ui/jquery-ui.js?ln=primefaces&v=2.2.1"></script>
<script>
/*<![CDATA[*/
jQuery(function() {
jQuery("#dialog1").dialog({
autoOpen: false,
modal: true
});
jQuery("#dialog2").dialog({
autoOpen: false,
modal: true
});
});
/*]]>*/
</script>
</head>
<body>
<div style="z-index: 1; position: static;" onclick="jQuery('#dialog1').dialog('open')">
position: static; /* default */
<div id="dialog1" title="Dialog1"></div>
</div>
<div style="z-index: 1; position: fixed; left: 100px; top: 100px" onclick="jQuery('#dialog2').dialog('open')">
position: fixed;
<div id="dialog2" title="Dialog2"></div>
</div>
</body>
</html>
После загрузки страницы это выглядит так:
Диалог в пределах нормального div отображается правильно
Первый диалог определен с нефиксированным позиционированным div, и диалог появляется нормально:
Наложение диалога в фиксированном элементе div
Обратите внимание, что при отображении второго диалогового окна, определенного в фиксированном позиционированном элементе div, пользователь не может щелкнуть по нему, так как он перекрывается наложенным div:
Обратите внимание, что z-индекс оверлейного div в обоих случаях равен 1001, а z-индекс диалога равен 1002. Таким образом, оверлейный div не должен перекрывать диалог, но, к сожалению, это относится к диалогам в фиксированной позиции. отд.
Так как я использую Primefaces, я связан с jQuery 1.4.4. Проблема возникает в Firefox 4, последней версии и Safari, последней версии.
Можете ли вы восстановить эту проблему, и у вас есть решение для этого? Обратите внимание, что я не хочу размещать диалоговое окно за пределами фиксированного элемента div , хотя это решило бы проблему . Причина в том, что я использую шаблонизатор JSF, и поэтому нижний колонтитул моей страницы будет динамически заполняться контентом - в этом случае всплывающее диалоговое окно. Если бы мне пришлось разместить диалог где-то еще, это нарушило бы модульность.