Текстовое поле JQuery Dialog исчезает при нажатии на любой другой ввод - PullRequest
0 голосов
/ 16 марта 2012

Я занимаюсь разработкой приложения .NET MVC3, в котором я использую диалоговое окно jquery для отображения нескольких текстовых сообщений и текстовой области во всплывающем окне с помощью кнопки «Отмена», которая находится в div «divForSentToCaseCommentLable».Я вызываю этот диалог по нажатию кнопки «sentToCase».

chtml

<div id="divForSentToCaseComment">
                    <div id="divForSentToCaseCommentLable" style="display: none">
                        <b>
                            @Html.Raw("You are about to send the Alert to the Case Management queue and will be unable to make any further edits.")
                            <br />
                             @Html.Raw("Would you like to continue?")
                        </b>
                        <br />
                        @Html.Raw("Reason for status change:")
                        <br />
                    </div>
                    <div id="divShowCommentForStatusNDuedateChange" style="display: none">
                        @Html.TextArea("StatusDueDateChangeComment", new { @id = "StatusDueDateChangeComment", @name = "StatusDueDateChangeComment", String.Empty, @class = "text-box multi-line", @maxlength = "8000", @onkeypress = "return ImposeMaxLength(this,8000)", @onpaste = "return MaxLengthPaste(this,8000)" })
                        <div id="StatusCommentValidateMessage" style="display: none" />
                    </div>

                </div>

JQuery

$("#sentToCase").click(function () {

    if (isChanged && !isSubmit) {
        var conf = confirm("The changes you made have not been saved. \nWould you like to continue?");
        if (!conf) {
            return false;
        }
    }
    window.onbeforeunload = null;
    $("#StatusDueDateChangeComment").val('');
    $("#StatusCommentValidateMessage").hide();
    $("#divShowCommentForStatusNDuedateChange").show();
    $("#divForSentToCaseCommentLable").show();

    $('#divForSentToCaseComment').dialog({
        autoOpen: false,
        resizable: true,
        width: 415,
        height: 300,
        modal: true,
        fontsize: 10,
        title: 'Reason for send to case',
        buttons: {
            "Ok": function () {
                //                    var sendToCaseAnswer = confirm("You are about to send the Alert to Cases and will be unable to make any further edits.  Would you like to continue?");
                //                    if (sendToCaseAnswer) {
                var reasonForClear = $("#StatusDueDateChangeComment").val();
                var incidentId = $("#IncidentID").val();
                if (validateSatusComment(reasonForClear, "SentToCase")) {
                    $.blockUI({ message: '<h2><img src="../../Content/images/spinner.gif" />Loading ...</h2>' });
                    $.ajax({
                        type: "GET",
                        data: { incidentId: incidentId, reasonForClear: reasonForClear },
                        //url: '/Bamplus/AlertAndCaseManager/Alert/SendToCaseStatus',
                        url: sendToCaseStatusJsonUrl,
                        dataType: "json",
                        cache: false,
                        contentType: "application/json",
                        success: function (data) {
                            if (data.redirectTo != null) {
                                window.location = data.redirectTo;
                                $.unblockUI({ fadeOut: 200 });
                            } else {
                                $('#Messages').show(400);
                                $("#Messages").html(data.Html);
                                $.unblockUI({ fadeOut: 200 });
                            }
                        },
                        error: function () {

                            $.unblockUI({ fadeOut: 200 });

                        }
                    });
                    //                    }
                    $(this).dialog("close");
                }
            },
            Cancel: function () {
                $(this).dialog("close");

            }
        }, open: function () {
            $('.ui-dialog-buttonpane').find('button:contains("Cancel")').removeClass().addClass("Button");
            $('.ui-dialog-buttonpane').find('button:contains("Ok")').removeClass().addClass("Button");
        }

    });
    $("#divForSentToCaseComment").dialog("open");
    return false;


});

Есть еще одна кнопка "Наблюдение", которая вызывает "divShowCommentForStatusNDuedateChange" в диалоговом окне для отображения только текстовой области с OkКнопка отмены

JQuery:

$("#watching").click(function () {
    if (isChanged && !isSubmit) {
        var conf = confirm("The changes you made have not been saved. \nWould you like to continue?");
        if (!conf) {
            return false;
        }
    }
    window.onbeforeunload = null;
    $('#divShowCommentForStatusNDuedateChange').dialog({
        autoOpen: false,
        resizable: false,
        width: 350,
        height: 220,
        modal: true,
        fontsize: 10,
        title: 'Reason for status change',
        buttons: {
            "Ok": function () {
                var reasonForClear = $("#StatusDueDateChangeComment").val();
                var incidentId = $("#IncidentID").val();
                if (validateSatusComment(reasonForClear, "Watching")) {
                    $.blockUI({ message: '<h2><img src="../../Content/images/spinner.gif" />Loading ...</h2>' });
                    $.ajax({
                        type: "GET",
                        data: { incidentId: incidentId, reasonForClear: reasonForClear },
                        //url: '/Bamplus/AlertAndCaseManager/Alert/WatchingStatus',
                        url: watchingStatusJsonUrl,
                        dataType: "json",
                        cache: false,
                        contentType: "application/json",
                        success: function (result) {
                            if (result.redirectTo != null) {
                                window.location = result.redirectTo;
                                $.unblockUI({ fadeOut: 200 });
                            } else {
                                $('#Messages').show(400);
                                $("#Messages").html(result.Html);
                                $.unblockUI({ fadeOut: 200 });
                            }
                        },
                        error: function () {

                            $.unblockUI({ fadeOut: 200 });

                        }
                    });
                    $(this).dialog("close");
                }
            },
            Cancel: function () {
                $(this).dialog("close");
            }
        },
        open: function () {
            $('.ui-dialog-buttonpane').find('button:contains("Cancel")').removeClass().addClass("Button");
            $('.ui-dialog-buttonpane').find('button:contains("Ok")').removeClass().addClass("Button");
        }
    });
    $("#StatusDueDateChangeComment").val('');
    $("#StatusCommentValidateMessage").hide();
    $("#divShowCommentForStatusNDuedateChange").dialog("open");
    return false;
});

Задача -

сценарий 1:

  • при загрузке страницы Я нажимаю кнопку "просмотр", чтобыотобразить «просмотр всплывающего окна» только с текстовой областью и «OK Cancel button», что идеально.
  • Затем я нажимаю кнопку «Отмена» из «просмотра всплывающего окна», которое скрывает «просмотр всплывающего окна»."
  • Теперь я нажимаю кнопку" sentToCase "на главной странице, чтобы отобразить всплывающее окно sentToCase с текстовым сообщением и текстовой областью.
  • Я обнаружил, что текстовая область не отображается в" sentToCase "всплывающее окно ", я вижу текстовое сообщение только во всплывающем окне" sentToCase ".

сценарий 2:

  • При первой загрузке страницы, если я непосредственно нажимаю на"Затем кнопка sentToCase «всплывающее окно sentToCase» корректно отображает текстовое сообщение и текстовую область с «OK отмены бу»ттон ", что правильно.

1 Ответ

0 голосов
/ 20 марта 2012

Я нашел решение этой проблемы, сославшись на этот пост

Диалоговое окно jquery ui удаляет

Проблема здесь в том, что у вас есть вложенные диалоги. Диалог jQuery работает так, что он предполагает, что все диалоги должны быть эксклюзивными. Не вкладывайте свои диалоговые окна, и все должно быть в порядке.

после отделения существующего кода div работает нормально. Я сделал это так

<div id="divForSentToCaseComment">
                    <div id="divForSentToCaseCommentLable" style="display: none">
                        <b>
                            @Html.Raw("You are about to send the Alert to the Case Management queue and will be unable to make any further edits.")
                            <br />
                            @Html.Raw("Would you like to continue?")
                        </b>
                        <br />
                        @Html.Raw("Reason for status change:")
                        <br />
                    </div>
                    <div id="divShowCommentForStatusNDuedateChangeSendToCase" style="display: none">
                        @Html.TextArea("StatusDueDateChangeComment", new { @id = "StatusDueDateChangeCommentSendTocase", @name = "StatusDueDateChangeComment", String.Empty, @class = "text-box multi-line", @maxlength = "8000", @onkeypress = "return ImposeMaxLength(this,8000)", @onpaste = "return MaxLengthPaste(this,8000)" })
                         <div id="StatusCommentValidateMessageSendToCase" style="display: none" />
                    </div>
                </div>
                <div id="divShowCommentForStatusNDuedateChange" style="display: none">
                        @Html.TextArea("StatusDueDateChangeComment", new { @id = "StatusDueDateChangeComment", @name = "StatusDueDateChangeComment", String.Empty, @class = "text-box multi-line", @maxlength = "8000", @onkeypress = "return ImposeMaxLength(this,8000)", @onpaste = "return MaxLengthPaste(this,8000)" })
                         <div id="StatusCommentValidateMessage" style="display: none" />
                    </div>

но из-за отдельных элементов div мне нужно приложить дополнительные усилия для проверки all. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...