JQuery模态关闭最小化窗口为少数用户(在IE9)



所以,一些用户在点击保存这个模态窗口时遇到了浏览器窗口最小化的问题。对于这些用户来说,这是一致的,但这只是一小部分用户。大多数人都在使用IE9,每个有这个问题的人都在使用IE9。它发生在.dialog('close');调用上,并且在到达close函数之前最小化。有人有什么想法吗?

$("#new-specified").dialog($.extend({}, ns.modalOptions, {
            open: function () {
                if (ns.disabled) {
                    $(this).dialog("close");
                }
                $(this).dialog("option", "title", app.viewModels.MissionViewModel.EditingSpecified() ? "EDIT SPECIFIED TASK" : "NEW SPECIFIED TASK");
                $(this).parent().find("button:contains('Cancel')").removeClass().addClass("cancel-button");
                $(this).parent().find("button:contains('SAVE')").removeClass().addClass("save-button");
                app.viewModels.MissionViewModel.CurrentSpecified().TempDescription(app.functions.htmlUnescape(app.viewModels.MissionViewModel.CurrentSpecified().Description()));
                if (app.viewModels.MissionViewModel.SpecifiedTasks().length === 0) {
                    app.viewModels.MissionViewModel.CurrentSpecified().IsMainEffort(true);
                }
            },
            buttons: {
                "Cancel": function() {
                    $(this).dialog("close");
                },
                "SAVE": function () {
                    var newSpecified = app.viewModels.MissionViewModel.CurrentSpecified();
                    newSpecified.Description(app.functions.htmlEscape(newSpecified.TempDescription()));
                    newSpecified.Validate();
                    if (newSpecified.IsInError()) {
                        return;
                    }
                    if (!app.viewModels.MissionViewModel.EditingSpecified()) {
                        app.viewModels.MissionViewModel.SpecifiedTasks.push(newSpecified);
                    } else {
                        app.viewModels.MissionViewModel.OldSpecified().CopyFrom(newSpecified);
                        newSpecified = app.viewModels.MissionViewModel.OldSpecified();
                    }
                    app.viewModels.MissionViewModel.CurrentSpecified(new app.models.SpecifiedTaskViewModel());
                    var isMainEffort = newSpecified.IsMainEffort();
                    var index = isMainEffort ? app.viewModels.MissionViewModel.SpecifiedTasks().indexOf(newSpecified) : -1;
                    app.viewModels.MissionViewModel.VerifyMainEffort(index);
                    ns.setupSpecifiedModal();
                    //VV This line below minimizes
                    $(this).dialog("close");
                    ns.setupDroppable();
                }
            },
            close: function() {
                // We don't reach here before the window minimizes
                app.viewModels.MissionViewModel.CurrentSpecified(new app.models.SpecifiedTaskViewModel());
                app.viewModels.MissionViewModel.EditingSpecified(false);
                app.viewModels.MissionViewModel.VerifyMainEffort(-1);
                ns.saveMissionToServer();
            }
        }));

这个问题可能有解决方案:动态加载jQuery移动会导致IE最小化

似乎调用blur()强制IE窗口到堆栈的后面。如果你正在使用jQuery Mobile,这里是相关的问题:https://github.com/jquery/jquery-mobile/issues/2057

如果你不使用jQuery移动,寻找调用blur()在你的代码

在jquery-UI 1.10.0: http://bugs.jqueryui.com/ticket/9420中也可以找到。

如第一条注释所示,原因是在document.body上调用了blur()

作为一种解决方法,你可以覆盖body.blur(),看看我如何在IE8中禁用body.blur() ?

最新更新