我有非常奇怪的行为,我在使用此
完成ajax调用时关闭对话框 $.ajax({
url: "",
data : { },
type : "POST",
dataType : "text",
cache : false,
success: function(response) { // on success..
},
complete : function() {
$("#dialogDiv").dialog("close");
$("#dialogDiv").dialog("destroy");
$("#dialogDiv").remove();
},
error : function(errMsg)
{
console.log("AJAX : submit : error");
console.log(jsonToString(errMsg));
}
});
然而,我的问题是我的本地服务器中的有时关闭,有时不是,并且很多时候它不能在生产服务器上运行,我真的无法找出问题所在。有没有办法在完整的事件中强行关闭窗口?还是其他什么?
答案 0 :(得分:1)
检查源代码,确保没有弹出多个对话框。由于您正在使用id
jQuery,因此只会对匹配id
的第一个DOM元素执行操作(因为id应该是页面唯一的。)
如果您要关闭所有对话框,我建议您将$("#dialogDiv")
移至class
,然后使用班级选择器.
$(".dialogDiv")
最后,您应该缓存选择器,甚至更好地利用chaining
Quick Guide: Chaining in Jquery。
缓存示例:
var $dialogDiv = $('#dialogDiv"); // use the $ in the var to say -- Hey this is a jQuery object
$dialogDiv.dialog("close");
$dialogDiv.dialog("destroy");
$dialogDiv.remove();
如果您需要多次重复使用选择器,这非常有用。否则,您强制javascript重新分析同一元素的整个DOM结构。
链接示例:
$("#dialogDiv").dialog("close").dialog("destroy").remove();
这是有效的,因为jQuery在执行操作后返回一个对象。在这种情况下,您可能不需要close
或remove
因为destroy
应该为您处理它,但如果没有它们,我就没有太多的例子。
答案 1 :(得分:1)
我找到了解决方案,非常奇怪的行为但它正在运行,而不是在complete
事件中关闭弹出窗口我在done
事件中关闭它并且它正在工作
$.ajax({
url: "",
data : {},
type : "POST",
dataType : "text",
cache : false,
success: function(response) { // on success..
},
complete : function() {
},
error : function(errMsg)
{
console.log("AJAX : submit : error");
console.log(jsonToString(errMsg));
}
}).done(function() {
$("#dialogDiv").dialog("close");
$("#dialogDiv").dialog("destroy");
$("#dialogDiv").remove();
});