当前位置: 首页 > 知识库问答 >
问题:

从表中读取输入vaue时有问题

富涛
2023-03-14

实际上,我正在尝试使用循环中的querySelector从HTML表中读取输入字段值,但我不知道为什么它会显示错误“typeerror:Cannot read property'value'of null”。

我还尝试了以下方法:-ocells.item(j).getElementsByTagName('input')[0].value Same result:-“TypeError:无法读取null的属性'value'”

请帮我弄清楚我做错了什么,

谢谢

代码如下:

null

<!DOCTYPE html>

<head>
<style>
table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even) {
  background-color: #dddddd;
}
</style>
</head>

<body>

<table id="m-table">
   <caption>Item Lists</caption>
  <thead class="text-center">
    <tr>
      <th scope="col">#</th>
      <th scope="col">Item Code</th>
      <th scope="col">Item Description</th>
      <th scope="col">Rate</th>
      <th scope="col">Order Qty</th>
      <th scope="col">Order Amount</th>
      <th scope="col">Rate of Rec. Qty</th>
      <th scope="col">Quantity Received</th>
    </tr>
  </thead>
  <tbody id = "PO_results">
     <tr class = "aach-Result">
      <th class = "rowInd" scope="row">1</th>
      <td class = "IC">2</td>
      <td class = "ID">3</td>
      <td class = "IR">4</td>
      <td class = "OQ">5</td>
      <td class = "OAM">6</td>
      <td>
      <div >
      <input id = "1" type="number"   aria-describedby="inputGroup-sizing-sm"  min="1" required>
      </div>
      </td>
      <td>
      <div >
      <span id="inputGroup-sizing-sm"></span>
      <input id = "2" type="number"  aria-describedby="inputGroup-sizing-sm"  min="1" required>
      </div>
      </td>
    </tr>
     <tr class = "aach-Result">
      <th class = "rowInd" scope="row">2</th>
      <td class = "IC">3</td>
      <td class = "ID">4</td>
      <td class = "IR">5</td>
      <td class = "OQ">6</td>
      <td class = "OAM">7</td>
      <td>
      <div >
      <input id = "1" type="number"   aria-describedby="inputGroup-sizing-sm"  min="1" required>
      </div>
      </td>
      <td>
      <div >
      <span id="inputGroup-sizing-sm"></span>
      <input id = "2" type="number"  aria-describedby="inputGroup-sizing-sm"  min="1" required>
      </div>
      </td>
    </tr>
  </tbody>
  <tfoot>
  <tr>
      <th id="LinesTableGRN" colspan="7">Total Amount</th>
      <td> <input id = "TotalTableGRN" type="number"  min="1" disabled></td>
  </tr>
</table>

<input type="submit" value="Submit" onclick = "ProcessGETable()">


   <script>
   function ProcessGETable()
   {
    var Tdata = [];
 
    var oTable = document.getElementById('m-table');
    var rowLength = oTable.rows.length;
    for (i = 1; i < rowLength; i++)
    {
    var row = [];         
       var oCells = oTable.rows.item(i).cells;        
       var cellLength = oCells.length;
      
       for(var j = 1; j < cellLength-1; j++)
       {
              if(j < 5)
              {
              var cellVal = oCells.item(j).innerHTML;
              row.push(cellVal);
              }
              else
              {
              var test =  oCells.item(j).querySelector('input');
              console.log(test.value)
              }
        }
         Tdata.push(row)
    }
  console.log(Tdata)
   }
    </script>
  </body>  

null

共有1个答案

劳彦
2023-03-14

由于运行for循环时的最后一列引用了不包含input元素的“Order Amount”列,因此发生了上述错误。因此,这行ocells.item(j).queryselector('input')将为空。以获得‘的’率。QTY'将if(j<5)更改为if(j<6)

如果你想得到这两个‘率’。Qty“和”Quantity Received“还将(var j=1;j 更改为(var j=1;j

此更改应消除您面临的错误,并将返回值。请验证..

null

html prettyprint-override"><!DOCTYPE html>

<head>
<style>
table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even) {
  background-color: #dddddd;
}
</style>
</head>

<body>

<table id="m-table">
   <caption>Item Lists</caption>
  <thead class="text-center">
    <tr>
      <th scope="col">#</th>
      <th scope="col">Item Code</th>
      <th scope="col">Item Description</th>
      <th scope="col">Rate</th>
      <th scope="col">Order Qty</th>
      <th scope="col">Order Amount</th>
      <th scope="col">Rate of Rec. Qty</th>
      <th scope="col">Quantity Received</th>
    </tr>
  </thead>
  <tbody id = "PO_results">
     <tr class = "aach-Result">
      <th class = "rowInd" scope="row">1</th>
      <td class = "IC">2</td>
      <td class = "ID">3</td>
      <td class = "IR">4</td>
      <td class = "OQ">5</td>
      <td class = "OAM">6</td>
      <td>
      <div >
      <input id = "1" type="number"   aria-describedby="inputGroup-sizing-sm"  min="1" required>
      </div>
      </td>
      <td>
      <div >
      <span id="inputGroup-sizing-sm"></span>
      <input id = "2" type="number"  aria-describedby="inputGroup-sizing-sm"  min="1" required>
      </div>
      </td>
    </tr>
     <tr class = "aach-Result">
      <th class = "rowInd" scope="row">2</th>
      <td class = "IC">3</td>
      <td class = "ID">4</td>
      <td class = "IR">5</td>
      <td class = "OQ">6</td>
      <td class = "OAM">7</td>
      <td>
      <div >
      <input id = "1" type="number"   aria-describedby="inputGroup-sizing-sm"  min="1" required>
      </div>
      </td>
      <td>
      <div >
      <span id="inputGroup-sizing-sm"></span>
      <input id = "2" type="number"  aria-describedby="inputGroup-sizing-sm"  min="1" required>
      </div>
      </td>
    </tr>
  </tbody>
  <tfoot>
  <tr>
      <th id="LinesTableGRN" colspan="7">Total Amount</th>
      <td> <input id = "TotalTableGRN" type="number"  min="1" disabled></td>
  </tr>
</table>

<input type="submit" value="Submit" onclick = "ProcessGETable()">


   <script>
   function ProcessGETable()
   {
    var Tdata = [];
 
    var oTable = document.getElementById('m-table');
    var rowLength = oTable.rows.length;
    for (i = 1; i < rowLength; i++)
    {
    var row = [];         
       var oCells = oTable.rows.item(i).cells;        
       var cellLength = oCells.length;
      
       for(var j = 1; j < cellLength; j++)
       {
              if(j < 6)
              {
              var cellVal = oCells.item(j).innerHTML;
              row.push(cellVal);
              }
              else
              {
              var test =  oCells.item(j).querySelector('input');
              console.log(test.value)
              }
        }
         Tdata.push(row)
    }
  console.log(Tdata)
   }
    </script>
  </body>  

 类似资料:
  • 问题内容: 如果我有一些代码,例如 并且输入文件包含成对的行,我该如何做,以便仅导入每行的第一行?因此,换句话说,每条奇数行都只有?谢谢 问题答案: 您可能想考虑使用来简化奇数行()的过滤。或者在另一种方法中,如果您使用的是JDK7,则可以使用该方法,并在迭代时再次过滤奇数。

  • 问题内容: 我正在使用从运行约一分钟的进程中读取stdout。 我该如何stdout以流方式打印出该流程的每一行,以便可以看到生成的输出,但仍然阻止该流程终止,然后再继续? 似乎一次给出所有输出。 问题答案: 这是一个简单的示例(不检查错误): 如果ls结束太快,则while循环可能会在你读取所有数据之前结束。 你可以通过以下方式在中捕获其余部分:

  • 问题内容: 如何在输入框中获取输入框中的值? 问题答案: 每次释放键都会触发onkeyup。虽然它看起来是解决方案,但它仍然存在一些问题。 如果用户使用箭头移动光标,则会触发该光标,并且您必须检查自己是否字段值没有更改。 如果用户使用鼠标在输入字段中复制/粘贴一个值,或者在浏览器中单击“撤消/重做”,则不会触发。 就像在Mac或Google文档中一样,我不想保存按钮来在我们的应用程序中提交表单,这

  • 我的问题如下:我需要扫描来读取多行用户输入。用户可以输入由空格或换行符分隔的任意字符组合。我的目标是将每一个用空格或换行分隔的输入进行处理并通过printf输出。但是,我不允许一次存储多个输入。我的问题是:每次用户按enter键时,scanf都会读取整行,因为我已经在while循环中进行了扫描!=EOF。但是,我不想让scanf读取所有的输入行,直到用户按下EOF。这可能吗?以下是一些例子: 一些

  • 我试图分块读取输入流并写入文件以避免内存问题,我接收json格式的数据,并使用以下代码写入文件。 我的问题是,大多数json都写得很好,虽然其中一些包含损坏的数据,但我不确定我是否正确地将CharBuffer与BufferedReader一起使用,我观察到的另一件事是,对于少量数据,它正确地将CharBuffer写入文件,当我从服务器接收到更大的数据(大约2MB的输入流-不是很大)时,我通常会遇到

  • 问题内容: 如何使用Go中的函数从标准输入获取整数输入? 如果使用无法完成此操作,那么读取单个整数的最佳方法是什么? 问题答案: http://golang.org/pkg/fmt/#Scanf Go中包含的所有库都有充分的文档记录。 话虽如此,我相信 绝招