首先 - 查看 Javascript 框架。您正在谈论的那种功能已经足够先进,如果您真的希望您的代码在所有浏览器中正确工作,您不应该自己这样做。它还可以让你的 HTML 没有丑陋的内联 Javascript 等,这被认为是不好的做法。话虽如此,这里有一个想法:
您是否考虑过每个项目有两行,一行处于“编辑模式”,另一行处于“正常模式”?您可以将“编辑模式”行设置为默认隐藏,当有人单击编辑链接时,您可以隐藏该行并将编辑的行显示在视图中。这确实比通过 AJAX 调用来获取编辑表单更容易。
编辑
这是一些可以帮助您入门的代码:
function editRow(row_id, callback) {
// you would get this dynamically through ajax, thus why we need the callback
var html = '<tr id="edit_' + row_id + '" class="edit"><td><input type="text" name="td_1" value="Text 1"></td><td><input type="text" name="td_2" value="Text 2"></td><td><input type="submit" name="submit" value="submit"></td></tr>';
callback(html);
}
$('a.edit', '#data').click(function() {
var $tr = $(this).closest('tr');
var id = $tr.attr('id').split('_').pop();
var edit_row = '#edit_' + id;
if($(edit_row).length == 1) { // edit row already exists
$tr.hide();
$(edit_row).show();
} else { // doesn't exist, fetch it
editRow(id, function(html) {
$tr.hide();
$tr.after(html);
});
}
return false;
});
$(window).click(function(e) {
$('tr.edit:visible').each(function() {
var $tr = $(e.target).closest('tr');
var id = $(this).attr('id').split('_').pop();
console.log(e.target, $tr, this);
if($tr.attr('id') != this.id) {
$(this).hide();
$('#row_' + id).show();
}
});
});
我可能应该注意到,有很多 jQuery 插件可以为您做很多这样的事情,并且根据您的应用程序的需要,您最好每次只获取行,而不是根本不获取它们,等等。这个只是一个粗略的想法,你可能需要做什么来实现你想要的,其余的取决于你。:)