从控制台调用JqueryUI对话框时打开,但不是从具有相同代码的js文件调用

时间:2014-06-06 15:33:51

标签: javascript jquery jquery-ui jquery-ui-dialog

当使用autoOpen作为false并初始化jquery UI对话框,然后使用对话框(“打开”)和对话框(“关闭”)时,我过去没有遇到任何问题。出于某些原因,在我的最新项目中,这似乎在从代码调用时失败,但是当从控制台手动调用时,它可以工作。 (并且它也可以在Firefox中完美运行,但在我的其他测试环境中失败,尽管IE9和Chrome)。关于要检查什么的任何想法? (到目前为止,我已经尝试过比较我的其他项目,设置z-index,将div移动到页面的其他区域,以及不同的doctypes无济于事)。我正在使用jquery 1.11.1,jqueryUI 1.10.4,并且页面上有datatables.net控件,但对话框不在此控件内。 lib是1.9.4所以..任何建议都会有所帮助,谢谢!

早期触发的代码:

$("#csProgressPanel").dialog({
            modal: true,
            title: "Progress",
            width: 316,
            height: 116,
            autoOpen: false,
            disabled: false,
            center: true,
            dialogClass: 'no-close'
        });

稍后调用的代码(就在mvc ajax请求之前 - 请注意,此代码在Web控制台中运行,而不是由于某种原因从我的js文件调用时):

$("#csProgressPanel").dialog("open");

稍后调用的代码:

$("#csProgressPanel").dialog("close");

更新:

我正在使用它作为我的服务器端调用的“等待”对话框,它似乎在服务器端调用后非常快速地打开和关闭。这是我正在使用的代码:

function ShowWaitDialog() {
    $("#csProgressPanel").dialog("open");
}

function HideWaitDialog() {
    console.log("closing popup");
    $("#csProgressPanel").dialog("close");
}

function JSON_AjaxRequest(controller, method, parameters, callBackSuccess) {

    ShowWaitDialog();

    var savedData = "";

    if (!parameters || parameters.length < 1)
        parameters = "{}";
    else
        parameters = JSON.stringify(parameters);

    var hasError = false;
    var lastErrorMessage = "";

    $.support.cors = true;

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        async: false,
        url: SERVER_TO_USE + "/" + controller + "/" + method,
        data: parameters,
        success: function (data, textStatus, jqXHR) {
            callBackSuccess(data);
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(textStatus);
            console.log(errorThrown);
            hasError = true;
            lastErrorMessage = errorThrown;
        },
        complete: function (jqXHR, textStatus) {
            HideWaitDialog();
            if (hasError) {
                var errorObject = ErrorHandling.BuildClientSideError(lastErrorMessage);
                ErrorHandling.ShowErrors(errorObject);
            }
        },
        dataType: 'json'
    });
}

3 个答案:

答案 0 :(得分:1)

我建议你在代码中加入几个console.log()语句,看看你的目标。

我也会删除例如&#34; CLOSE&#34;对话框,因为您的窗口可能会非常快速地打开和关闭。

答案 1 :(得分:0)

听起来好像可能存在时间问题,例如jQuery没有找到元素,或者在打开任何东西之前你正在调用对话框(&#34;打开&#34;)。我有一个类似的问题,在控制台上打印一个元素告诉我该元素不是null - 但事实上它是!  有时选择是&#34;现场&#34;选择,并将自动更新,因此很难确定。我会检查你的时间并确保jQuery在正确的时间找到合适的元素。

答案 2 :(得分:0)

从ajax调用中删除以下行修复了对话框的问题。

async: false,

如果您能解释为什么这是解决方案,请随时编辑此答案,但它确实有效。我不记得为什么我希望它同步,希望它不重要:))

感谢