RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1144060
Accepted
FootballClub Rosma
FootballClub Rosma
Asked:2020-06-22 04:54:57 +0000 UTC2020-06-22 04:54:57 +0000 UTC 2020-06-22 04:54:57 +0000 UTC

如何计算动态生成的输入字段中两个字段的总和?javascript

  • 772

大家好!有一个动态表,您可以在其中添加任意数量的字段并计算每个字段的总和。我是javascript新手,所以当然我没有足够的经验,我对如何解决这个问题的想法倾向于循环,或者如何将每次迭代的总和写入数组然后输出每个迭代的总和一对数字。任务是计算所有可能输入字段的总和 Number[1] + Number[2],即 如果添加了 10 个动态字段,则响应应该有 10 个带有金额的字段。
如果您能告诉我为了解决这个问题应该朝着哪个方向前进,我将不胜感激。

var d = document;
var last_id = 0;

function add_value_f() {

  // находим нужную таблицу
  var tbody = d.getElementById('table').getElementsByTagName('tbody')[0];

  // создаем строку таблицы и добавляем ее
  var row = d.createElement("tr");
  tbody.appendChild(row);

  // создаем ячейки в вышесозданной строке
  var td1 = d.createElement("td");
  var td2 = d.createElement("td");


  row.appendChild(td1);
  row.appendChild(td2);

  last_id = last_id + 1;

  // добавляем формы ввода в ячейки
  td1.innerHTML = '<input type="number" min="0" id="chislo[' + last_id + ']" class="data">';
  td2.innerHTML = '<input type="number" min="0" id="chislo2[' + last_id + ']" class="data">';
};

function totalSum() {
  var num1 = document.getElementById('chislo[' + last_id + ']').value;
  var num1p = parseInt(num1);
  if (isNaN(num1p)) {
    num1p = 0;
  }

  var num2 = document.getElementById('chislo2[' + last_id + ']').value;
  var num2p = parseInt(num2);
  if (isNaN(num2p)) {
    num2p = 0;
  }

  var sum;
  sum = num1p + num2p;
  out.innerHTML = " " + sum + "<br>";

}
<div class="stats-tab">
  <h1> Таблица</h1>
  <table id="table">
    <thead>
      <tr>
        <th class="data">Число 1</th>
        <th class="data">Число 2</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><input type="number" id="chislo[0]" min="0" class="data"></td>
        <td><input type="number" id="chislo2[0]" min="0" class="data"></td>
      </tr>
    </tbody>
  </table>
</div>
</div>
<div class="col-12">
  <input type="button" onclick="add_value_f()" value="Добавить" />
</div>
</div>
<button onclick="totalSum()">=</button>
<hr>
<h1>Результаты:</h1>
<div id="out"></div>

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    OPTIMUS PRIME
    2020-06-22T08:02:40Z2020-06-22T08:02:40Z

    let test = 1;
    
    _id("append").addEventListener("click", function () {
      let tbody = document.querySelector("#table tbody");
    
      let tr = `<tr>
        <td><input type="number" min="0" class="data" value="${ test++ }"></td>
        <td><input type="number" min="0" class="data" value="${ test++ }"></td>
      </tr>`;
      
      tbody.insertAdjacentHTML("beforeEnd", tr);
    });
    
    _id("count").addEventListener("click", function() {
      let inp = document.querySelectorAll("#table input.data");
      
      let result = [];
      for( let i = 0; i < inp.length; i += 2 ) {
        result.push( Number(inp[i].value) + Number(inp[i+1].value) );
      }
      
      _id("out").innerHTML = result.join("<br>");
    });
    
    /***/
    function _id(str) {
      return document.getElementById(str);
    }
    <table id="table">
      <tr>
        <td><input type="number" min="0" class="data"></td>
        <td><input type="number" min="0" class="data"></td>
      </tr>
    </table>
    
    <button id="append">Добавить</button>
    <button id="count">=</button>
    <hr>
    <h1>Результаты:</h1>
    <div id="out"></div>

    "#table input.data"— id="table" 内的所有具有“数据”类的输入。

    好吧,在周期结束时,它不必是i++. 您可以在其中添加将在每次迭代中执行的任何代码(甚至是函数):

    for( let i = 1; i < 1024; console.log( "Оппа!", i = i * 2 ) );
    // Для демо. В реальном коде не надо так!)
    // Можно переписать:
    
    for( let i = 1; i < 1024; i *= 2 ) {
      // console.log( i );
    };

    • 1
  2. Yugofx
    2020-06-22T05:24:59Z2020-06-22T05:24:59Z

    您不需要生成唯一id输入,因为您的锚元素是一行。我们收集了所有行,遍历每一行并计算输入的数量。

    const table = document.getElementById('table');
    const tbody = table.lastElementChild; // почти надежно, но можно по старинке селектором забрать боди
    
    // функция отдаст массив чисел, выводите в каком угодно виде
    function sumUp() {
        const sumArr = new Array(tbody.children.length);
        for (let i = 0, sum = 0; i < sumArr.length; i++, sum = 0) {
            tbody.children[i]
                .querySelectorAll('input[type=number]')
                .forEach(({ value }) => sum += +value);
            sumArr[i] = sum;
        }
        return sumArr;
    }
    
    • 0

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5