首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Javascript对表单中不同字段类型的值进行求和

如何使用Javascript对表单中不同字段类型的值进行求和
EN

Stack Overflow用户
提问于 2020-07-05 13:32:13
回答 8查看 328关注 0票数 0

我似乎不知道如何在表单中总结各种字段类型的值。我有一些选定的字段如下:

代码语言:javascript
运行
复制
<select name="age">
    <option value="">- Select -</option>
    <option value="1" class="">30-34</option>
    <option value="2">35-39</option>
</select>

还有一些单选按钮:

代码语言:javascript
运行
复制
    <p>Do you smoke?</p>
    <label for="riskSmoke"><input type="radio" name="riskSmoke" value="2"> Yes</label><br>
    <label for="riskSmoke"><input type="radio" name="riskSmoke" value="0"> No</label>

但是我该怎么把所有的选择加起来呢?我可以找到解决方案,增加值的只是输入,或只是收音机,或只是选择。但不是全部在一起。

必要的话我会用jQuery。

编辑我应该说,我想要输出的总价值给用户,也许在一个元素内。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2020-07-05 14:52:52

可以稍微清理一下,但是一个使用FormData接口将表单中的所有值相加的示例:https://developer.mozilla.org/en-US/docs/Web/API/FormData

代码语言:javascript
运行
复制
function getValues() {
  let myForm = document.getElementById('myForm');
  let formData = new FormData(myForm);
  
  let total = 0;

  for (var value of formData.values()) {
     total += parseInt(value);
  }
  
  document.getElementById("total").innerHTML = total;
  
  console.log(total);
}
代码语言:javascript
运行
复制
<form id="myForm" name="myForm">
  <div>
    <label for="age">What is your age?</label>
    <select name="age">
        <option value="">- Select -</option>
        <option value="1" class="">30-34</option>
        <option value="2">35-39</option>
    </select>
  </div>
  <div>
    <label for="riskSmoke">Do you smoke?</label>
    <label for="riskSmoke"><input type="radio" name="riskSmoke" value="2"> Yes</label>
    <label for="riskSmoke"><input type="radio" name="riskSmoke" value="0"> No</label>
  </div>
</form>

<button onclick="getValues()">Get Values</button>

<p>Total:</p>
<div id="total"></div>

票数 1
EN

Stack Overflow用户

发布于 2020-07-05 13:40:42

您可以使用构造函数FormData。

代码语言:javascript
运行
复制
An HTML <form> element — when specified, the FormData object will be populated with the form's current keys/values using the name property of each element for the keys and their submitted value for the values. It will also encode file input content.

您可以使用FormData.append向此添加一个键/值对:

代码语言:javascript
运行
复制
formData.append('username', 'Chris'); 
票数 1
EN

Stack Overflow用户

发布于 2020-07-05 13:43:43

我在表单中包含所有输入的ID和和,确保只对选中的收音机和复选框进行计数。

代码语言:javascript
运行
复制
const sumValues = () => {
  let val = 0;
  $("#myForm :input").each(function() {
    if (this.type === "radio" || this.type === "checkbox")
      val += this.checked ? +this.value : 0;
    else val += +this.value; // cast to number
  })
  $("#total").text(val)
};
$(function() {
  $("#myForm").on("change", sumValues).change(); //when page loads
})
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="myForm">
  <select name="age">
    <option value="">- Select -</option>
    <option value="1" class="" selected>30-34</option>
    <option value="2">35-39</option>
  </select>


  <p>Do you smoke?</p>
  <label for="riskSmoke"><input type="radio" checked name="riskSmoke" value="2"> Yes</label><br>
  <label for="riskSmoke"><input type="radio" name="riskSmoke" value="0"> No</label>
  <br/>Total: <span id="total" />
</form>

平原JS

代码语言:javascript
运行
复制
const sumValues = () => {
  let val = 0;
  [...document.getElementById("myForm").querySelectorAll("input, select, textarea")].forEach(function(elem) {
    if (elem.type === "radio" || elem.type === "checkbox")
      val += elem.checked ? +elem.value : 0;
    else val += +elem.value; // cast to number
  })
  document.getElementById("total").textContent = val;
};
window.addEventListener("load", function() {
  document.querySelector("#myForm").addEventListener("change", sumValues)
  sumValues()
})
代码语言:javascript
运行
复制
<form id="myForm">
  <select name="age">
    <option value="">- Select -</option>
    <option value="1" class="" selected>30-34</option>
    <option value="2">35-39</option>
  </select>


  <p>Do you smoke?</p>
  <label for="riskSmoke"><input type="radio" checked name="riskSmoke" value="2"> Yes</label><br>
  <label for="riskSmoke"><input type="radio" name="riskSmoke" value="0"> No</label>
  <br/>Total: <span id="total" />
</form>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62741359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档