Подтвердить что ты не робот

Диалоговое окно JQuery UI, тоже выделено серым цветом

Я использую диалоговое окно jquery UI для изменения строки данных на веб-сайте ASP.NET. При открытии диалога я добавляю диалог в форму подкладки, это дает мне возможность использовать обратную передачу. $('#' + id).parent().appendTo($("form"));

Но когда я устанавливаю свойство диалога modal: true Не только серый цвет недоступен, диалоговое окно также является серым и недоступным.

Если я удалю $('#' + id).parent().appendTo($("form"));, он работает, как предполагалось, но потом я не могу использовать обратные копии.

Я делаю что-то не так, или мне не хватает точки, чтобы заставить это работать?

Javascript в верхней части .aspx

<script type="text/javascript">
    $(document).ready(function () {

        $('#workDialog').dialog({
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 800,
            height: "auto",
            modal: true
        });
    });

    function showDialog(id) {
        $('#' + id).parent().appendTo($("form"));
        $('#' + id).dialog("open");
    }

    function closeModalDiv(id) {
        $('#' + id).dialog("close");
    }
</script>

div, содержащий диалог

<div id="workDialog" title="Basic dialog">
    <asp:UpdatePanel ID="upWorkDialog" runat="server" UpdateMode="Conditional">  <ContentTemplate>
        <table id="Table1" class="item">
        <tr>
            ...
        </tr>
        <tr>
            <td><asp:TextBox ID="txt...></asp:TextBox></td>
            <td><asp:TextBox ID="txt...></asp:TextBox></td>
            <td><asp:TextBox ID="txt...></asp:TextBox></td>
            <td><asp:TextBox ID="txt...></asp:TextBox></td>
        </tr>
        </table>
        <asp:Label ID="lblWorkEditError" runat="server" Text=""></asp:Label>

        <asp:Button ID="btnSave" runat="server" Text="Gem" OnClick="btnSave_Click" />
        <asp:Button ID="btnCancel" runat="server" Text="Annuller" OnClientClick="javascript:closeModalDiv('workDialog');" />
    </ContentTemplate></asp:UpdatePanel>
</div>
4b9b3361

Ответ 1

Это известная ошибка в 1.10.0 и отлично работает в более старых версиях, но я РЕШАЛ ее, изменив z-index для стиля ui-dialog

добавьте следующий стиль в таблицу стилей или на странице

.ui-dialog
{
    z-index: 101;
}

ИЛИ найдите класс .ui-dialog в jquery-ui-1.10.0 css и добавьте "z-index: 101;" стиль стиля

теперь перезагружайте страницу, а IT WORKS...

Ответ 2

Это известная ошибка в 1.10.0. Я решил это, изменив z-индекс для наложения.

$('#workDialog').dialog({
            modal: true,
            width: 400,
            height: 200,
            appendTo: $("form:first")
        });
        var dz = $(".ui-front").css("z-index")
        $(".ui-widget-overlay").css({ "z-index": dz - 1 });
        $(".ui-widget-overlay").appendTo($("form:first"));

Ответ 3

Невозможно переместить диалог после его создания. Я думаю, что самое легкое и лучшее исправление - переместить appendTo в инициализацию диалога.

<script type="text/javascript">
$(document).ready(function () {

    $('#workDialog').dialog({
        autoOpen: false,
        draggable: true,
        resizable: false,
        width: 800,
        height: "auto",
        modal: true,
    appendTo: "#aspnetForm" // moved append to where the dialog i created
    });
});

function showDialog(id) {
    $('#' + id).dialog("open");
}

function closeModalDiv(id) {
    $('#' + id).dialog("close");
}
</script>

Ответ 4

Похоже, что после версии 1.10.0 модальное обходное решение больше не работает. Понижав версию пользовательского интерфейса jQuery до 1.9.2, она должна снова работать.

Ответ 5

Я пробовал, и он должен работать. Не могли бы вы прокомментировать строку

 $('#' + id).parent().appendTo($("form"));

Измените, где вы инициализируете свое диалоговое окно, чтобы взять объект в переменной dlg2

var dlg2 = $("#dialog1").dialog({
    autoOpen: false,
    draggable: true,
    resizable: false,
    width: 800,
    height: "auto",
    modal: true,
    open: function (type, data) { $(this).parent().appendTo("form"); }
});

Добавьте эту строку сразу после инициализации вашего диалога.

$(dlg2).parent().appendTo($("form"));

Есть ли у вас только один диалог? Вы можете попробовать инициализировать его в объявлении диалога, добавив открытый код:

$("#dialog1").dialog({
    autoOpen: false,
    draggable: true,
    resizable: false,
    width: 800,
    height: "auto",
    modal: true,
    open: function (type, data) { $(this).parent().appendTo("form"); }
});

Ссылка: диалоговое окно jQuery UI с обратной записью кнопки ASP.NET

Ответ 6

В приведенном ниже коде показано исправление вашей проблемы, работало для меня:

<script type="text/javascript">
    $(document).ready(function () {

        $('#workDialog').dialog({
            autoOpen: false,
            draggable: true,
            resizable: false,
            width: 800,
            height: "auto",
            modal: true,
            appendTo: "form"
        });
    });

    function showDialog(id) {
        $('#' + id).dialog("open");
    }

    function closeModalDiv(id) {
        $('#' + id).dialog("close");
    }
</script>

В jQuery UI v1.10 они добавили свойство appendTo, которое, похоже, делает то же самое, что и вызов .parent(). appendTo ($ ( "form" )). Диалоговое окно появляется поверх серого фона. И Post back работает.

Ответ 7

во второй строке функции showDialog, добавьте набор css для z-индекса. Должно выглядеть так:

function showDialog(id) {
    $('#' + id).parent().appendTo($("form"));
    $('#' + id).dialog("open").css({"z-index":"101"});
}

Ответ 8

Ответ Карстен работал у меня с небольшим изменением. Мне нужно переместить $('#workDialog').dialog... после $(".ui-widget-overlay").appendTo($("form:first"));