我正在使用jquery ui对话框,我从jquery ui网站下载,版本是jquery-ui-1.10.2.custom.min.js,jquery是jquery-1.9.1.js,它与jquery ui捆绑在一起js,但现在我遇到了一个问题:当打开对话框并单击“保存”按钮时,我希望关闭对话框,这是我的代码:
$(function(){
$("#dialog-form").dialog({
autoOpen: false,
height: 350,
width: 450,
modal: true,
buttons: {
"save": function() {
if(!checkDept()){
return ;
}
$.post('dept_save.do',
{'dept.deptId':$("#dialog_dept_deptId").val(),
'dept.deptName':$("#dialog_dept_deptName").val(),
'dept.manager':$("#dialog_dept_manager").val(),
},function(data, status, xhr){
if(status == 'success'){
alert('save success');
$(this).dialog("close");
}else{
alert('error:'+data);
}
}
,"json");
}
},
close: function() {
$(this).dialog("close");
}
});
/* to open dialog*/
$("#add").click(function(){
$("#dialog-form").dialog("open");
});
现在,当我关闭“保存成功”弹出对话框时,dialog-form
对话框未关闭,并且发生错误:
未捕获错误:在初始化之前无法调用对话框上的方法;试图调用方法'close'jquery-1.9.1.js:507。
还有另一个错误:
Uncaught SyntaxError:意外的令牌o jquery-1.9.1.js:541
感谢。
答案 0 :(得分:33)
一旦你进入this
,你就会失去$.post()
的背景。
在$ .post之前,将上下文this
保存在 save 按钮功能内的变量中。
$('#dialog-form').dialog({
// .....
buttons: {
'save': function() {
var $this = $(this);
// -this- is still the original context
// of $("#dialog-form")
$.post({
/// ...
$this.dialog('close'); // <-- used here
});
}
}
});
答案 1 :(得分:9)
通过调用.dialog(options)
方法初始化对话框时,会创建一个新对话框,但它不会与要转换为对话框的原始div相关联(样本中的“#dialog-form”码)。 dialog(options)
函数返回包含对话框数据的元素。所以,如果你这样做:
var myDialog = $("#dialog-form").dialog(options);
然后你可以像这样调用open方法:
myDialog.dialog('open');
如果你想找到包含对话框的元素,它是最接近“具有”ui-dialog-content“类的div:
var myDialog = $('#dialog-form').closest('div.ui-dialog-content');
对话框数据是uiDialog
数据,如果您查看此元素数据,您将会看到这些数据:
myDialog.data();
答案 2 :(得分:4)
$(this)
未定位$.post
内的对话框,您需要存储对它的引用。
var self = this; // add this
$.post(..., function(){
$(self).dialog("close"); // modify this to use self
答案 3 :(得分:2)
我必须执行以下操作才能关闭对话框。
$("#Note").dialog({
autoOpen: true,
modal: true,
create: function (e, ui) {
//
},
open: function () {
//
},
buttons: {
//
$(".ui-dialog-titlebar-close").trigger('click');
}
}
});
答案 4 :(得分:0)
另一件可能导致此错误的事情是,如果出于任何原因在对话框中调用removeData()。显然,jquery data()函数用于初始化对话框,因此如果出于任何原因删除了数据,对话框将不会认为它已被初始化。
当我使用data()函数在对话框对象中存储表单数据,然后在关闭它之前在对话框上调用removeData()时,我发现了这一点。
答案 5 :(得分:0)
您可能使用过弹出窗口而不是对话框。我认为关闭两者的方法是不同的。尝试使用$("#popid").popup('close');