【问题标题】:Multiply Cell[2] cell[3] in all the rows. Cell[2]*Cell[3]. Both the cells are Dropboxes在所有行中乘以 Cell[2] cell[3]。单元格[2]*单元格[3]。两个单元格都是 Dropboxes
【发布时间】:2017-03-21 10:26:19
【问题描述】:

GPA 计算器。所以我需要将单元格[2] 和单元格[3] 相乘,然后将结果相加。但是这两个单元格都是保管箱。那么如何获取同一行的单元格 [2] 和单元格 [3] 中的 Dropbox 的 ID。注意:允许动态添加行。

function multiplyadd() {
  var tbody = document.getElementById("gpatable");
  var answer = 0,
    answer1 = 0;
  for (var i = 0; i < tbody.rows.length; i++) {
    var row = tbody.rows[i + 1];
    var idd = document.getElementById("gpatable").rows[i + 1].cells[2].id;
    var strUser = idd.options[idd.selectedIndex].value;
    // var credits = row.cells[2].childNodes[0].options[selectedIndex].value;
    var credits = parseInt(strUser);
    var id1 = document.getElementById(row.cells[3].childNodes[0]);
    var grades = parseInt(id1);
    // var grades = row.cells[3].childNodes[0].options[selectedIndex].value;
    var answer1 = (Number(credits) * Number(grades)).toFixed(3);
    answer = answer + answer1;
  }
  alert(answer);
}
<table id="gpatable" class="table col-md-8 offset-md-2">
  <thead class="bg-faded">
    <tr>
      <th>#</th>
      <th width="370px">Course Name</th>
      <th>Credits</th>
      <th>Grades</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row" id="one" value="1">1</th>
      <td class="td"><input type="text" name="subname" class="form-control col-md-8"></td>
      <td class="td">
        <select onchange="updatecreditarray(this.id);" id="select_credit" class="custom-select">
    					  	<option selected>-</option>
    					  	<option value="1">1.00</option>
    					  	<option value="2">2.00</option>
    					  	<option value="3">3.00</option>
    					  	<option value="4">4.00</option>
    					  </select>
      </td>
      <td class="td">
        <select onchange="updategradearray(this.id);" id="select_grades" class="custom-select">
    					  	<option selected>-</option>
    						<option value="4">A+</option>
    						<option value="3.75">A</option>
    						<option value="3.5">A-</option>
    						<option value="3.25">B+</option>
    						<option value="3">B</option>
    						<option value="2.75">B-</option>
    						<option value="2.5">C+</option>
    						<option value="2.25">C</option>
    						<option value="2">C-</option>
    						<option value="0">F</option>
    					</select>
      </td>
    </tr>
  </tbody>
</table>
<div class=" row col-md-8 offset-md-2" style="padding:0;">
  <button title="Add course" type="button" onclick="addrow();" class="btn btn-secondary col-md-1 col-sm-5 col-xs-12" id="addcourse" name="addcourse"><i class="fa fa-plus" aria-hidden="true"></i></button>
  <button title="Remove course" type="button" onclick="subrow();" class="btn btn-secondary col-md-1 col-sm-5 col-xs-12" id="subcourse" name="addcourse"><i class="fa fa-minus" aria-hidden="true"></i></button>
  <button type="button" class="btn btn-secondary col-md-3 col-sm-5 col-xs-12" id="calcdown" name="addcourse">Calculate &amp; Download&nbsp; <i class="fa fa-download" aria-hidden="true"></i></button>
  <button type="button" onclick="calculate();" class="btn btn-primary col-md-2 offset-md-5 col-sm-4 col-xs-12" id="calc" name="addcourse">Calculate&nbsp;&nbsp;<i class="fa fa-calculator" aria-hidden="true"></i></button>

【问题讨论】:

  • 提供的代码不完整。你在哪里调用你的函数multiplyadd()?通过minimal reproducible example 并尝试更好地解释问题和您想要的输出。

标签: javascript html css calculator


【解决方案1】:

你需要获取类名custom-select的所有元素。 getElementsByClassName 将返回一个包含 2 个元素的数组。现在您可以通过索引访问特定值。

var dd = document.getElementsByClassName('custom-select'); //this will get elements with class custom-select
var idxc = dd[0].options[dd[0].selectedIndex].value; // this will get Credits element value
var idxg = dd[1].options[dd[1].selectedIndex].value; // this will get Grade element value

idxc 将具有 Credits 值,而 idxg 将具有 Grade 值。

编辑:
总结一下你所需要的:

document.getElementById("calc").addEventListener("click", function() {
  var dd = document.getElementsByClassName('custom-select');
  var sum = 0;
  if (dd) { // if custom-select element found
    for (var i = 0; i < dd.length - 1; i = i + 2) {
      if (!isNaN(dd[i].options[dd[i].selectedIndex].value) && !isNaN(dd[i + 1].options[dd[i + 1].selectedIndex].value)) {
        sum += dd[i].options[dd[i].selectedIndex].value * dd[i + 1].options[dd[i + 1].selectedIndex].value;
      } else {
        console.log("ERR: Please select all values");
        i = dd.length; // break loop
        sum = 0; // in case of error
      }
    }
  }
  console.log(sum);
}, false);

fiddle DEMO

【讨论】:

  • 但是如何获取每一行的保管箱的值。这只会给我第一行 Credits 和 grades value 的值。我如何获得第二行,然后是所有存在的行。代码不应该是这样的。 :row.dd[0].options[dd[0].selectedIndex].value
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多