我已经尝试过几个其他论坛帖子似乎解决了我的同一个问题,但它们都不适合我。我将值从html页面上的按钮单击传递到数组中。如果数组的第一个值已存在于数组中,我想更新数组中的其他4个值。如果它不存在,我希望它创建一个新的数据行。我可以创建新行,但是检查数组中的值将不起作用。我一直在尝试使用angularJS和数据表来实现这一目标,但在阅读了一些那些不能同时工作的帖子后放弃了这种方法。另外一件事,如果我得到执行“here”警报的代码,它会抛出5次。它应该只提醒一次,所以我假设它是否正在更新表,它会做5次,这没有意义。提前谢谢!
var arrayTable = [{busId: "", xCord: "", yCord: "", eventType: "", timeStamp: ""}];
$(document).ready(function() {
$('#example').dataTable();
} );
function fnUpdateRow(t, r, e, w, q) {
arrayTable = [t, r, e, w, q];
var addToArray = true;
for(var i = 0; i < arrayTable.length; i++) {
if(arrayTable[i].busId == t) {
addToArray=false;
arrayTable[i] = ({busId:t, xCord:r, yCord:e, timeStamp:w, eventType:q});
alert("here");
}
}
if(addToArray) {
$('#example').dataTable().fnAddData(arrayTable);
alert("here2");
}
}
答案 0 :(得分:0)
你在函数的开头重新设置arrayTable
,这是错误的。找到匹配后突破循环。而且您正在更新dataTable,但如果找不到匹配项,则不会添加arrayTable
。
function fnUpdateRow(t, r, e, w, q) {
var addToArray = true;
for(var i = 0; i < arrayTable.length; i++) {
if(arrayTable[i].busId == t) {
addToArray=false;
arrayTable[i] = ({busId:t, xCord:r, yCord:e, timeStamp:w, eventType:q});
alert("here");
break;
}
}
if(addToArray) {
var newRow = {busId:t, xCord:r, yCord:e, timeStamp:w, eventType:q};
arrayTable.push(newRow);
$('#example').dataTable().fnAddData(newRow);
alert("here2");
}
}