如何访问已被Javascript中的复选框选中的表的一行中的单元格值

How to access values of cells within a row of a table which has been checked by a checkbox in Javascript?

本文关键字:一行 单元格 何访问 访问 Javascript 复选框      更新时间:2023-09-26

我想知道是否有人可以帮助我得到这个工作。

我正在使用HTML创建一个表,它至少有1行,但没有最大行数-因为它们可以由用户添加/删除-和4列,第一个包含一个复选框,最后2包含下拉菜单。

我希望能够在数组中存储这些菜单的值,只有当该行的复选框已被选中。例如,如果第一行有1和A作为它的下拉值,第二行有2和b。如果只检查了第一行,那么数组应该只包含[1,A]。相反,mine保存所有值,包括未检查的值,即[1,A,2,B]。

我的Javascript函数和html表代码如下:

function calculate(textID) {
  var table = document.getElementById('course'); //id of table
  var rowCount = table.rows.length;
  var array = []; //array to hold the values
  var c = 0;
  dmenus = document.getElementByTagName("select"); //get the drop down menus
  for (var a = 1; a < rowCount; i++) { //a = 1 as the 1st row contains column headings
    var row = table.rows[a];
    var check = row.cells[0].childNodes[0];
    if (null != check && true == check.checked) {
      for (var b = 0; b < dmenus.length; b++) {
        val = dmenus[b].options[dmenus[b].selectedIndex].value;
        array[c] = val; //set index of array to equal value of dropdown box
        c++;
      }
    } else {
      b++;
    }
  }
 
<table id="course">
  <tr>
    <td><input type="checkbox" name="ucheck" id="ucheck" onclick="checkAll('course')" /></td>
    <th style="color:white">Course Title</th>
    <th style="color:white">Credits</th>
    <th style="color:white">Grade</th>
  </tr>
  <tr>
    <td><input type="checkbox" name="tick" id="tick" /></td>
    <td><input type="text" /></td>
    <td>
      <select name="credits" id="credits">
                    <option...</select></td>
    <td>
      <select name="grade" id="grade">
                    <option...</td>
 </table>

它只适用于第一行,但如果有多于一行,它就不做它应该做的事情。我正在使用的编码平台似乎不支持JQuery,所以Javascript代码将是最受欢迎的。

终于让它工作了,重新排列了一下代码。可能有一种更有效的方法,但是嘿,它对我有用:D

var array = [];
var narray = [];
var a = 0;
var b = 0;
var c = 0;
ddownselects = document.getElementsByTagName("select");
//get all elements into one array
for (var j = 0; j < ddownselects.length; j++) {
  val = ddownselects[j].options[els[j].selectedIndex].value;
  array[a] = val;
  a++;
}
var rlen = array.length / 2; //number of rows
for (var i = 1; i <= rlen; i++) {
  var row = table.rows[i];
  var check = row.cells[0].childNodes[0];
  if (check.checked) {
    narray[b] = array[c]; //set array values to new array only if that row is checked
    b++;
    c++;
    narray[b] = array[c];
    b++;
    c++;
  } else {
    c += 2; //if not checked, got to next row's values
  }
 
<table id="course">
  <tr>
    <td><input type="checkbox" name="ucheck" id="ucheck" onclick="checkAll('course')" /></td>
    <th style="color:white">Course Title</th>
    <th style="color:white">Credits</th>
    <th style="color:white">Grade</th>
  </tr>
  <tr>
    <td><input type="checkbox" name="tick" id="tick" /></td>
    <td><input type="text" /></td>
    <td>
      <select name="credits" id="credits">
                    <option...</select></td>
    <td>
      <select name="grade" id="grade">
                    <option...</td>