单击任何其他输入时,JQuery对话框文本区域消失

时间:2012-03-16 07:31:58

标签: c# jquery asp.net-mvc asp.net-mvc-3 razor

我正在开发.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”div,只显示带有“取消”按钮的文本区域

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:

  • 页面加载我点击“观看”按钮只显示“观看弹出窗口” 文本区域和“确定取消按钮”,这是完美的。
  • 然后我按“观看弹出窗口”中的“取消按钮”,隐藏“观看弹出窗口”
  • 现在我从主页面转到“sentToCase”按钮,显示带有短信和文本区域的“sentToCase弹出窗口”。
  • 我发现文本区域没有在“sentToCase弹出窗口”中呈现,我只能在“sentToCase弹出窗口”中看到短信。

方案2:

  • 在第一页加载时,如果我直接点击“sentToCase”按钮,那么“sentToCase弹出”正确地用“OK取消按钮”正确显示文本信息和文本区域。

1 个答案:

答案 0 :(得分:0)

我通过参考这篇文章找到了解决这个问题的方法

jquery ui dialog box removes <div> after closing

这里的问题是您的对话框是嵌套的。 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,我需要做一些额外的努力来验证一个全部。 谢谢