我有一个jQueryUI Dialog从外部网址加载一个表单,表单呈现正常并且发布正常但是保存或取消按钮似乎都没有关闭表单但是对话框关闭图标确实很好。
这是我的脚本产生对话框并应该处理按钮:
$(function () {
$('a.modal').on('click', function() {
var href = $(this).attr('href');
$("#modalAdd").html("")
.dialog({
title: $(this).attr("title"),
width: 400,
height: 300,
buttons: {
"Save": function() {
$.post(href,
$("form").serialize(),
function() {
$(this).dialog("close");
});
},
Cancel: function() {
$(this).dialog("close");
}
}
})
.load(href, function() {
$(this).dialog("open");
});
return false;
});
});
最终解决方案是将变量声明在对话框声明范围之外,如下所示:
$(function () {
$('a.modal').on('click', function() {
var href = $(this).attr('href');
var modal = $("#modalAdd");
modal.html("")
.dialog({
title: $(this).attr("title"),
width: 400,
height: 300,
buttons: {
"Save": function() {
$.post(href,
$("form").serialize(),
function() {
modal.dialog("close");
});
},
Cancel: function() {
modal.dialog("close");
}
}
})
.load(href, function() {
**modal**.dialog("open");
});
return false;
});
});
答案 0 :(得分:2)
由于范围可变,只要您启动$.post
调用的回调函数,this
就不再是对话框。请尝试拨打$("#modalAdd").dialog('close');
。
如果您不介意扩展$.post()
和$.load()
来电,可以使用完整的this
方法将$.ajax()
的上下文设置为某个元素。 See the "context" option in the docs
答案 1 :(得分:1)
this
,需要缓存到局部变量。
"Save": function () {
var $this = $(this);
$.post(href, $("form").serialize(), function () {
$this.dialog("close");
});
},