当使用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'
});
}
答案 0 :(得分:1)
我建议你在代码中加入几个console.log()语句,看看你的目标。
我也会删除例如&#34; CLOSE&#34;对话框,因为您的窗口可能会非常快速地打开和关闭。
答案 1 :(得分:0)
听起来好像可能存在时间问题,例如jQuery没有找到元素,或者在打开任何东西之前你正在调用对话框(&#34;打开&#34;)。我有一个类似的问题,在控制台上打印一个元素告诉我该元素不是null - 但事实上它是! 有时选择是&#34;现场&#34;选择,并将自动更新,因此很难确定。我会检查你的时间并确保jQuery在正确的时间找到合适的元素。
答案 2 :(得分:0)
从ajax调用中删除以下行修复了对话框的问题。
async: false,
如果您能解释为什么这是解决方案,请随时编辑此答案,但它确实有效。我不记得为什么我希望它同步,希望它不重要:))
感谢