У меня есть веб-страница с диалогом, который я показываю с помощью jQuery.dialog
(jQuery 1.7.1, jQuery-UI 1.8.18). Я создаю его вот так:
$(theDialog).dialog({
autoOpen: false,
width: "800px",
modal: true, // etc....
});
На той же странице у меня есть элемент управления списком, который я построил из стека элементов <div>
. Я слушаю клики по сложным элементам <div>
:
$("#listEmployees div").on("click", "input", listEmployees_ItemClicked);
где listEmployes_ItemChecked
- это мой обработчик событий. Когда я показываю диалог jQuery, большинство элементов на странице HTML отключены; т.е. они не реагируют на щелчки мыши и c. Однако мой стек списков не является: если я нажимаю на элементы в нем, обработчик события вызывается.
Чтобы обойти эту проблему, мне пришлось ввести глобальную переменную на странице, isDialogVisible
которую мой диалог устанавливает, когда она открывается и очищается, когда она закрывается. Обработчик события затем игнорирует событие, если глобальная переменная истинна. Излишне говорить, что это взломать и не будет хорошо масштабироваться.
Я ожидал, что dialog
jQuery, будучи модальным, отключит все элементы и события HTML из этих элементов, пока он открыт. Является ли это ожидание неправильным? Почему я все еще вижу щелчки мыши, когда модальный диалог вверх?
Диалоги jQuery UI (более ранние версии, чем 1.10) имеют zIndex
. Установите zIndex
на значение, превышающее любой z-index
, используемый в вашем CSS.
например.
$(theDialog).dialog({
autoOpen: false,
width: "800px",
modal: true,
zIndex: 99
});
Эта функция была удалена с jQuery UI v1.10:
Удалена опция zIndex
Подобно опции стека, опция zIndex не нужна при правильной реализации стекирования. Z-индекс определен в CSS, и теперь управление стеками контролируется тем, что сфокусированное диалоговое окно является последним элементом "stacking" в его родительском элементе.
Диалоги jQuery UI имеют метод moveToTop()
, но это только перемещает диалог в начало контекста диалога, поэтому он находится над любыми другими диалоговыми окнами на странице. Это задача разработчиков для обеспечения их CSS не вызывает проблем с укладкой. "К сожалению", пользовательский интерфейс jQuery не держит нас за руку.