Shift不是javascript中的函数

时间:2017-03-21 12:46:20

标签: javascript jquery shift

我的html中有多个表(具有相同的结构)。他们在标签中。我正在动态创建选项卡,我想将这些表数据发送到mysql数据库。所以我想用javascript获取这些数据。我使用for循环正确创建了 TableData1,TableData2 .... 数组。问题是我无法在此处增加 TableData ('TableData'+ i).shift(); 。我收到了一个错误。我想创建 TableData1.shift(),TableData2.shift().....

function myDataSendFunction(){
var i;

     for(i = 1; i <= array_size; i++){
         eval("var TableData"+i+"=[];");

      $('#mytable'+i+ ' tr').each(function(row, tr){
          ('TableData'+i)[row]={
              "colum1" : $(tr).find('td:eq(1)').text()
              , "colum2" :$(tr).find('td:eq(2)').text()
              , "colum3" : $(tr).find('td:eq(3)').text()
              , "colum4" : $(tr).find('td:eq(4)').text()
              , "colum5" : $(tr).find('td:eq(5)').text()
              , "colum6" : $(tr).find('td:eq(6)').text()
              , "colum7" : $(tr).find('td:eq(7)').text()
              , "colum8" : $(tr).find('td:eq(8)').text()
          }
      }); 

        ('TableData'+i).shift(); 

    }

}

我收到此错误。

Uncaught TypeError: ("TableData" + i).shift is not a function
    at myDataSendFunction (<anonymous>:25:25)
    at HTMLInputElement.onclick (create.php:1)

2 个答案:

答案 0 :(得分:1)

很明显,你对此非常陌生,所以我先向你展示然后解释第二。

function myDataSendFunction(){
    var i,
        TableData = [];

    for(i = 1; i <= array_size; i++){
        TableData[i] = [];

        $('#mytable' + i + ' tr').each(function(row, tr){
            TableData[i][row]={
                  "colum1" : $(tr).find('td:eq(1)').text()
                , "colum2" : $(tr).find('td:eq(2)').text()
                , "colum3" : $(tr).find('td:eq(3)').text()
                , "colum4" : $(tr).find('td:eq(4)').text()
                , "colum5" : $(tr).find('td:eq(5)').text()
                , "colum6" : $(tr).find('td:eq(6)').text()
                , "colum7" : $(tr).find('td:eq(7)').text()
                , "colum8" : $(tr).find('td:eq(8)').text()
            };
        }); 

        TableData[i].shift();
    }
}

基地on your comment

  

我该怎么办?我尝试使用TableData数组,然后问题发生在这里TableData [i] [row]中有Uncaught TypeError:无法设置属性&#39; 0&#39;未定义的

您的麻烦主要围绕尚未定义的变量设置属性。在尝试分配属性之前,您必须定义TableData

一旦TableData被&#34;初始化&#34;到数组(var TableData = []),您可以在TableData 上设置属性。但您无法立即在TableData 的属性上设置属性。例如,您无法直接跳转到TableData[i][row]。您必须先将TableData[i]设置为数组(TableData[i] = []),,然后,您可以将TableData[i][row]设置为某个值。

通过尝试用eval来解决这个问题,你遇到了一个全新的问题世界。尽量避免eval ......这是一个非常复杂的野兽,往往会造成很多混乱和痛苦。

查看MDN's Working with objects文档可能会有所帮助,以便更好地了解JavaScript的数组和对象会发生什么。

答案 1 :(得分:0)

显然你的元素选择是你做的错误。通过硬编码array_size而不使用for循环,您可以轻松地

  1. 使用像class这样的公共属性一次选择所有表。您将获得一个包含表对象的数组。
  2. 迭代表对象数组。
  3. 在循环内部选择每个表的所有行并将它们放入另一个循环中以提取数据并创建发送给数据库的数据数组。
  4. 找到我的sample implementation here

    请记住,当您计划使用数组时,请坚持使用数组,而不是在字符串和数组之间来回移动。它会导致你遇到的问题,比如你已经遇到的问题以及不必要的脏代码。