我有数据
<tr id="row_1">
<td id="td_1_1">Text 1</td>
<td id="td_2_1">Text 2</td>
<td><a href="#" onclick="editRow(1)">Edit row</a></td>
</tr>
然后在javascript中
function editRow(row_id) {
//some ajax to retrieve html in the format
//<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>
}
$(row_id).html(html)
]替换为行的TD。这一切都很好。但是我需要有一个取消按钮,单击它会将原始TD返回(即没有输入框)。任何想法,如何实现这一功能?我是否需要将编辑前行html复制到变量中,然后再取消替换输入框html?谢谢你的帮助。
修改
此外,如果用户点击页面上的其他位置,则应将其视为取消并将原始数据恢复。如何绑定此操作?
答案 0 :(得分:1)
首先 - 查看Javascript框架。您所讨论的功能类型非常先进,如果您真的希望您的代码能够在所有浏览器中正常工作,那么您不应该自己动手。它还可以让你保持你的HTML没有丑陋的内联Javascript等等,这被认为是不好的做法。话虽如此,这是一个想法:
您是否考虑过每个项目有两行,其中一行是“编辑模式”,另一行是“正常模式”?默认情况下,您可以将“编辑模式”行设置为隐藏样式,当有人单击编辑链接时,您可以隐藏该行并将编辑内容放入视图中。这比使用AJAX调用获取编辑表单更容易。
修改强>
Here's some code to get you started:
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插件可以为你做很多事情,根据你的应用程序的需要,你可能最好每次只获取行,而不是取出它们,这只是一个粗略的想法,你可能需要做什么来实现你想要的,其余的由你决定。 :)
答案 1 :(得分:1)
我认为使用jQuery获取初始功能,您可以查看jEditable插件。这是一个非常实用的插件,允许您单击某些文本并创建可编辑区域并取消等。我假设一旦用户单击“确定”或“保存”,您不需要恢复到原始文件,其唯一的中间编辑即此是一个问题。 jEditable负责这一点。