Javascript jQuery对话框表单序列化在后续使用中重新发布错误数据
我在jQuery对话框中处理表单,它发布的数据有一些问题。首先加载并保存工作良好,发布正确的数据。在我刷新页面之前,每个后续加载似乎都能正常工作,因为表单中有正确的数据,但是,保存时,第一次加载的数据就是每次发布的数据Javascript jQuery对话框表单序列化在后续使用中重新发布错误数据,javascript,ajax,webforms,jquery-dialog,Javascript,Ajax,Webforms,Jquery Dialog,我在jQuery对话框中处理表单,它发布的数据有一些问题。首先加载并保存工作良好,发布正确的数据。在我刷新页面之前,每个后续加载似乎都能正常工作,因为表单中有正确的数据,但是,保存时,第一次加载的数据就是每次发布的数据 function formdialog(url, tack, divid, scriptload){ $.getJSON(url+tack+"/form", function(data){ var formwin = '<div><for
function formdialog(url, tack, divid, scriptload){
$.getJSON(url+tack+"/form", function(data){
var formwin = '<div><form id="formdialog">'+data['form']+'</form></div>';
var dialog = $(formwin).dialog({
title: data['title'],
autoOpen: false,
modal: true,
buttons: {
"Save": function(){
$.post(url+tack+"/process",
$("#formdialog").serialize(),
function(data){
alert($("#formdialog").serialize());
$(this).dialog('close');
$(this).remove();
}
);
},
"Cancel": function(){$(this).dialog('close'); $(this).remove();}
}
});
dialog.dialog("open");
});
}
$(function(){
$("a.edlnk").click(function(){
var url = $(this).attr("href");
formdialog(CONFIG_HREF_SITE+"ajax/"+appControl, "/"+url, divid);
return false;
});
});
函数formdialog(url、tack、divid、scriptload){
$.getJSON(url+tack+“/form”,函数(数据){
var formwin=''+数据['form']+'';
变量对话框=$(formwin).dialog({
标题:数据['title'],
自动打开:错误,
莫代尔:是的,
按钮:{
“保存”:函数(){
$.post(url+tack+“/进程”,
$(“#formdialog”).serialize(),
功能(数据){
警报($(“#formdialog”).serialize());
$(this.dialog('close');
$(this.remove();
}
);
},
“取消”:函数(){$(this).dialog('close');$(this.remove();}
}
});
dialog.dialog(“打开”);
});
}
$(函数(){
$(“a.edlnk”)。单击(函数(){
var url=$(this.attr(“href”);
formdialog(CONFIG_HREF_SITE+“ajax/”+appControl,“/”+url,divid);
返回false;
});
});
我认为问题在于
$(this).dialog('close');
$(this).remove();
…在您的post
回调中,因为您尚未指定回调的上下文。如果是这样,将post
更改为此应该可以解决此问题:
$.ajax({
url: url+tack+"/process",
type: 'POST',
data: $("#formdialog").serialize(),
context: this,
success: function(data){
alert($("#formdialog").serialize());
$(this).dialog('close');
$(this).remove();
}
});
…因为当调用success
函数时,您保留了this
的含义
那么为什么这个问题会导致你看到的行为呢?因为如果不删除formwin
div
,就不会删除formdialog
表单
,这意味着页面上有多个具有相同ID的表单。尽管在多个元素上具有相同ID是无效的,因此会发生未定义的行为,大多数浏览器都会在您按ID请求元素时给您第一个匹配的元素,在您的情况下,这将是包含早期数据的早期表单
编辑回复您的评论:是的,我有点错过了那里的$(这个)。对话框('close')
。:-)有两个选项:一个是在局部变量中记住$(formwin)
,然后在回调中使用它,例如:
var formwin = '<div><form id="formdialog">'+data['form']+'</form></div>';
var formwinElement = $(formwin); // <== Remember it here
var dialog = formwinElement.dialog({ // <== Use it here
// ...
$.post(url+tack+"/process",
$("#formdialog").serialize(),
function(data){
alert($("#formdialog").serialize());
$(this).dialog('close');
formWinElement.remove(); // <== And again here
}
);
var formwin=''+数据['form']+'';
var formwinElement=$(formwin);//数据发布现在效果很好。问题是对话框现在无法关闭。建议?