oncommitpreserverows
是一个十分有用的属性,可以让我们在提交网页表格时,保存新增行的数据,并在刷新网页后不丢失这些新增行。接下来,我们将深入探讨这个属性的使用方法与注意事项。
一、基本使用方法
oncommitpreserverows
是一个表格的属性,对于带有 input
、textarea
或者 select
的表格行,该属性将会自动将新增的行保存在表格中,避免信息的丢失。
简单来说,想要使用 oncommitpreserverows
,只需要给表格添加该属性即可:
<table oncommitpreserverows>
<!-- 表格内容-->
</table>
不过,需要注意的是,oncommitpreserverows
属性只适用于基于表格的布局方式,如果想要使用类似的功能,需要在其他布局方式上使用其他的技术来实现。
二、如何保存新增行数据
在使用 oncommitpreserverows
的时候,我们需要注意的是如何保存新增行数据。其实,这个过程并不复杂,需要分以下两个步骤:
1、首先,需要在表格中添加一个隐藏的 input
标签,用于保存新增数据。例如:
<table oncommitpreserverows>
<tr>
<td><input type="text"></td>
<td><input type="text"></td>
</tr>
<!-- 隐藏域用于保存新增行的数据 -->
<input type="hidden" name="newrows" id="newrows" value="">
</table>
2、然后,在提交表单时,需要将新增行的数据保存至该表格中的 input
标签的 value 属性中。下面是一个示例:
$(document).ready(function () {
$('form').submit(function () {
var newRows = [];
$('table tr[data-new="1"]').each(function () {
var row = {};
$(this).find('input[name!="checked"]').each(function () {
row[$(this).attr('name')] = $(this).val();
});
newRows.push(row);
});
$('#newrows').val(JSON.stringify(newRows));
});
});
以上代码会将新增行的数据保存至表格中的 input
标签的 value 属性中。需要注意的是,在将数据保存至 input
标签之前,需要将其转换为 JSON 字符串。
三、注意事项
1、仅适用于临时数据
需要注意的是,oncommitpreserverows
属性仅适用于需要临时保存的数据。如果我们需要将数据保存至数据库或者其他数据源中,需要在提交表单时使用其他的方式来保存数据。
2、只适用于新增数据
oncommitpreserverows
属性只适用于新增数据,在更新或删除数据时无效。
3、需要开启 sessionStorage
oncommitpreserverows
属性会将新增行的数据保存至 sessionStorage 中,因此需要测试此属性之前,需要确保浏览器已经开启 sessionStorage 功能。
4、需要在网页刷新前执行保存操作
如果希望在网页刷新时保存新增行的数据,需要在网页刷新前执行保存操作。例如,在提交表单时,可以使用下面的代码:
$(window).on('beforeunload', function () {
var newRows = [];
$('table tr[data-new="1"]').each(function () {
var row = {};
$(this).find('input[name!="checked"]').each(function () {
row[$(this).attr('name')] = $(this).val();
});
newRows.push(row);
});
sessionStorage.setItem('newrows', JSON.stringify(newRows));
});
即可在窗口刷新前保存新增行的数据到 sessionStorage 中。
四、总结
oncommitpreserverows
属性是一个可以帮助我们临时保存新增行数据的便捷属性,使用起来很简单,只需要在表格中添加该属性,并在表单提交前将新增数据保存至一个隐藏的 input
标签的 value 属性中即可。
需要注意的是,该属性仅适用于临时保存的数据,只能对新增数据进行保存,需要在网页刷新前执行保存操作且需要开启 sessionStorage 功能。