我有一个在 jquery-ui 对话框中打开的表单,通过 ajax 提交,以 json 格式读取更新的数据并更新页面。第一次一切正常。在后续运行中,数据库中的数据会正确更新,但页面上的更新将应用于与第一次运行相同的单元格。
使用 Web Developer 工具栏中的“查看生成的源代码”,我可以看到旧表单仍在 DOM 中。所以我怀疑这$("form#hostEdit").find("input#id").val()
要么总是找到第一种形式,要么只被评估一次。我对 jQuery 很陌生,所以我不知道该怎么做。该表单是否仍应在 DOM 中?我应该使用不同的选择器吗?完全是别的东西吗?
$("table.hostgrid a.new").click(function() {
var id = this.id.substring(3);
var $dialog = $('<div></div>')
.load('/hosts/new?byte1=${network.byte1}&byte2=${network.byte2}&byte3=${network.byte3}&byte4=' + id);
var getHostAction = #{jsAction @NetworkHosts.view(':id') /}
$dialog.dialog({
autoOpen: false,
title: 'New host at ${network.byte1}.${network.byte2}.${network.byte3}.' + id,
width: 500,
buttons: {
"Create": function() {
$.ajax({
async: true,
type: 'post',
url: '/hosts/create',
data: $("form#hostNew").serialize(),
success: function(response) {
$dialog.html(response);
if ($("div.flashSuccess") != null) {
$dialog.dialog('destroy');
$.ajax({
url: getHostAction({'id': $("form#hostEdit").find("input#id").val()}),
dataType: 'json',
success: function(data) {
updateHost(data);
},
error: function(data, msg, exception) {
alert("Error during request: " + msg);
},
});
}
}
});
}
}
});
$dialog.dialog('open');
return false;
});
应用更新的函数:
function updateHost(host) {
var cell = $("td#dot"+host.byte4);
cell.fadeOut("fast", function() {
cell.find("span.hostname").text(host.hostname).attr("title", host.description);
cell.removeClass().addClass(host.agegroup);
if (host.type)
cell.addClass(host.type.toLowerCase());
if (host.is_dhcp)
cell.addClass("dhcp");
if (host.is_service)
cell.addClass("service");
cell.fadeIn("fast");
});
}