动态构建数组以插入SQL

时间:2015-09-16 18:00:45

标签: javascript jquery arrays performance multidimensional-array

我在单元格中有一个输入表。这些输入需要在单个插入中插入SQL。我在尝试构建数组时遇到了麻烦。我可以将输入到数组中的值推送没问题。当我按下另一个输入时,第一个数组被覆盖。我需要恢复数组或创建一个新数组,以便存储第一个数组的内容,并将第二个数据数组的值全部存储在一个数组中。

我希望用户单击一个保存按钮,该按钮将获取所有数据并将其插入到sql中。可能只有1个数组或3个数组或10个数组。所以我想问题就变成了;如何在全局数组中创建数组并推送值,然后创建另一个数组并在全局数组中推送值而不清除第一个数组的值?

我还没有得到AJAX请求,只是试图在准备中构建阵列。

非常感谢任何帮助。

HTML

<tr class="rows" id="row3" >
   <td class="celltimes4a"id="row3Project"></td>
   <td class="celltimes4c"id="row3Name">General</td>
   <td class="celltimes4"id="row3Sun" ><input id="num3Sun" class="alignRight"  type="text" name="hours" value="" onchange="tott(this)"></input></td>
   <td class="celltimes4"id="row3Mon" ><input id="num3Mon" class="alignRight" type="text" name="hours" value="" onchange="tott(this)"></input></td>
   <td class="celltimes4"id="row3Tue" ><input id="num3Tue" class="alignRight" type="text" name="hours" value="" onchange="tott(this)"></input></td>
   <td class="celltimes4"id="row3Wed" ><input id="num3Wed" class="alignRight" type="text" name="hours" value="" onchange="tott(this)"></input></td>
   <td class="celltimes4"id="row3Thu" ><input id="num3Thu" class="alignRight" type="text" name="hours" value="" onchange="tott(this)"></input></td>
   <td class="celltimes4"id="row3Fri" ><input id="num3Fri" class="alignRight" type="text" name="hours" value="" onchange="tott(this)"></input></td>
   <td class="celltimes4"id="row3Sat" ><input id="num3Sat" class="alignRight" type="text" name="hours" value="" onchange="tott(this)"></input></td>
   <td class="celltimes4b"id="total3"></td>
</tr>

的JavaScript

  var temp = {};
  var SqlArr = [];
      function tott(element) {


     var totwLeg = element.id;
     var splitNumero = totwLeg.split(/([A-Za-z]+)([0-9]+)/);
     var getNumero = splitNumero[2];
     var getDay = splitNumero[3];
     var EmpId = document.getElementById('num1').value;
     var WeekEnding = document.getElementById('theDate').value;
     var DateOccur = document.getElementById('row1' + getDay).innerHTML;
     var JobNum = getNumero - 2;
     var Customer = getNumero - 2;
     var HourValue = document.getElementById('num' + getNumero + getDay).value;
     var cnt = 0;
     Empdata = 'EmpData' + cnt + '';
     temp = {
         EmpId, WeekEnding, DateOccur, JobNum, Customer, HourValue
     };
     SqlArr.push({
         Empdata: temp
     });


 }

结果

temp=EmpId="2", WeekEnding="09-19-2015",DateOccur="09-14-2015",JobNum=6,Customer=6,HourValue="2"

期望的结果

temp={EmpId="2", WeekEnding="09-19-2015",DateOccur="09-14-2015",JobNum=6,Customer=6,HourValue="2"},{EmpId="2", WeekEnding="09-19-2015",DateOccur="09-16-2015",JobNum=6,Customer=6,HourValue="4"},{EmpId="2", WeekEnding="09-19-2015",DateOccur="09-16-2015",JobNum=6,Customer=6,HourValue="5"}

2 个答案:

答案 0 :(得分:1)

不确定这是错的,但首先从var SqlArr = [];中取出function tott()。每次调用该函数时,都会创建一个新的空数组。因此,当您致电SqlArr.push()时,您总是按下阵列上的第一个项目。

好吧,看起来它对我有用。看看这个小提琴:http://jsfiddle.net/r1L9oj80/1/

但是,您可能会查看“DateOccur”变量。它包含整个输入元素。

答案 1 :(得分:1)

您的temp对象无效,请尝试这样......

temp = {
  'EmpId': EmpId, 'WeekEnding': WeekEnding, 'DateOccur': DateOccur, 'JobNum': JobNum, 'Customer': Customer, 'HourValue': HourValue
};

加上数组SqlArr应该在函数之外定义,如另一个答案所述......