我跟随此tutorial在使用MVC4的JQuery数据表中实现单元格编辑。
使用插件的链接是:
要实现创建可编辑数据表的效果,您只需在脚本中包含以下内容
<script>
$(document).ready(function () {
$('#myDataTable').dataTable().makeEditable();
});
</script>
对于网格中存在的每个列,在DOM中创建一个事件以允许编辑。
如果数据集非常大,这已经证明会导致重大问题,甚至会导致我的浏览器崩溃。
当用户选择适当的列而不是尝试在DOM中构建大量事件时,是否可以仅调用编辑逻辑?
答案 0 :(得分:2)
In addition to @CMedina 's answer, please read:
.on() - Direct and delegated events
除了能够处理尚未创建的后代元素上的事件之外,委派事件的另一个优点是,当必须监视许多元素时,它们可能会降低开销。
在td
中包含1,000 #example
个元素的数据表中,此示例将处理程序附加到1,000个元素:
$("#example td").on("click",function(){
$(this).editable();
})
事件委派方法仅将事件处理程序附加到一个元素#example
,并且事件只需要冒出一个级别(从点击的td
到#example
) :
$("#example").on("click", "td", function(){
$(this).editable();
})
答案 1 :(得分:1)
我没有对非常大的数据集使用makeEditable(),但是你可能会从某些版本的提升中获得性能优势。我正在使用:
答案 2 :(得分:1)
另一种方法是在用户点击td时添加事件。
$(document).ready(function() {
oTable = $('#example').dataTable();
$("#example td").on("click",function(){
$(this).editable();
})
});
示例:https://jsfiddle.net/cmedina/7kfmyw6x/32/
现在,如果您不想编辑所有列,则可以为每个类的某些列分配可编辑的事件
var oTable = $('#table_id').dataTable(
{
"bSort": false,
"sPaginationType": "full_numbers",
});
$('td.editable_class', oTable.fnGetNodes()).editable('editable.php', {
"callback": function( sValue, y ) {
var aPos = oTable.fnGetPosition( this );
oTable.fnUpdate( sValue, aPos[0], aPos[1] );
},
"submitdata": function ( value, settings ) {
return {
"row_id": $(this).data('id'),
"column": $(this).data('column'),
};
},
"height": "17px",
"width": "100%",
});
答案 3 :(得分:1)
您可以点击td
进行编辑:
$("#example td").on("click",function(){
$(this).editable();
})