在 javascript 中合并 2 个函数的输出
Combinig output of 2 function in javascript
我对 Javascript(biopython 背景)比较陌生,我正在尝试向网站添加一个简单的功能。
本质上,我需要为 4 种类型的菜单(复选框)接受用户输入,然后将所选菜单的值 ($) 的总和乘以数字天数和人数(用户使用文本字段输入)。
下面是 HTML 和 Javascript 部分代码
function multiply() {
var n_ppl = document.getElementsByName('people')[0].value;
var n_days = document.getElementsByName('days')[0].value;
return var out = n_ppl * n_days;
}
function totalIt() {
var n_ppl = document.getElementsByName('people')[0].value;
var n_days = document.getElementsByName('days')[0].value;
var input = document.getElementsByName("product");
var total = 0;
for (var i = 0; i < input.length; i++) {
if (input[i].checked) {
total += parseInt(input[i].value);
}
return var price = total
}
// not sure how can I get - var final = total * out
// after I get it I can finally do - document.getElementsByName("total")[0].value = "$" + final.toFixed(2);
<br> Breakfast <input name="product" value="12" type="checkbox" onclick="totalIt()" /> <br>
<br> First Meal <input name="product" value="20" type="checkbox" onclick="totalIt()" /> <br>
<br> Second Meal <input name="product" value="15" type="checkbox" onclick="totalIt()" /> <br>
<br> Craft Service <input name="product" value="10" type="checkbox" onclick="totalIt()" /> <br>
<br> Number of People <input type="text" name="people"> <br>
<br> Number of Days <input type="text" name="days"> <br>
<br> Total: <input value="[=12=].00" readonly="readonly" type="text" name="total" />
我提前向所有 web 开发人员道歉我的 pythonic 风格。
我还应该提一下,这两个函数单独运行时效果很好,但即使不尝试乘以它们的输出(即即使它们的代码彼此相邻),也没有任何效果。
非常感谢您的帮助!
- 您只需要 一个函数 来迭代您的输入。
- 不要使用内联 JavaScript 它是不良编码习惯的标志,会使应用程序难以调试。将您的 JS 放在一个地方并利用
Element.addEventListener()
- 使用
Node.querySelector()
和Node.querySelectorAll()
- 处理相似名称时使用
name="product[]"
语法。这将作为值数组提交给后端。
- 您可以使用Array.prototype.reduce()将所有
'[name="product[]"]:checked'
复选框值减少(累加)为一个整数
- 将您的
<script>
代码放在 结束 </body>
标签之前
const EL_menu = document.querySelector("#menu");
const calcPrice = evt => {
const price = [...EL_menu.querySelectorAll('[name="product[]"]:checked')]
.reduce((n, el) => (n += +el.value, n), 0);
const nPers = +EL_menu.querySelector('[name="people"]').value || 1;
const nDays = +EL_menu.querySelector('[name="days"]').value || 1;
const total = price * nPers * nDays;
EL_menu.querySelector("[name=total]").value = `$${total.toFixed(2)}`;
}
EL_menu.querySelectorAll("input").forEach(el => el.addEventListener('input', calcPrice));
#menu label { display: block; }
<div id="menu">
<label><input type="checkbox" name="product[]" value="12"> Breakfast</label>
<label><input type="checkbox" name="product[]" value="20"> First Meal</label>
<label><input type="checkbox" name="product[]" value="15"> Second Meal</label>
<label><input type="checkbox" name="product[]" value="10"> Craft Service</label>
<label><input type="number" name="people" value="1" min="1"> Number of People</label>
<label><input type="number" name="days" value="1" min="1"> Number of Days</label><br>
Total: <input type="text" name="total" value="[=12=].00" readonly="readonly">
</div>
我对 Javascript(biopython 背景)比较陌生,我正在尝试向网站添加一个简单的功能。
本质上,我需要为 4 种类型的菜单(复选框)接受用户输入,然后将所选菜单的值 ($) 的总和乘以数字天数和人数(用户使用文本字段输入)。
下面是 HTML 和 Javascript 部分代码
function multiply() {
var n_ppl = document.getElementsByName('people')[0].value;
var n_days = document.getElementsByName('days')[0].value;
return var out = n_ppl * n_days;
}
function totalIt() {
var n_ppl = document.getElementsByName('people')[0].value;
var n_days = document.getElementsByName('days')[0].value;
var input = document.getElementsByName("product");
var total = 0;
for (var i = 0; i < input.length; i++) {
if (input[i].checked) {
total += parseInt(input[i].value);
}
return var price = total
}
// not sure how can I get - var final = total * out
// after I get it I can finally do - document.getElementsByName("total")[0].value = "$" + final.toFixed(2);
<br> Breakfast <input name="product" value="12" type="checkbox" onclick="totalIt()" /> <br>
<br> First Meal <input name="product" value="20" type="checkbox" onclick="totalIt()" /> <br>
<br> Second Meal <input name="product" value="15" type="checkbox" onclick="totalIt()" /> <br>
<br> Craft Service <input name="product" value="10" type="checkbox" onclick="totalIt()" /> <br>
<br> Number of People <input type="text" name="people"> <br>
<br> Number of Days <input type="text" name="days"> <br>
<br> Total: <input value="[=12=].00" readonly="readonly" type="text" name="total" />
我提前向所有 web 开发人员道歉我的 pythonic 风格。
我还应该提一下,这两个函数单独运行时效果很好,但即使不尝试乘以它们的输出(即即使它们的代码彼此相邻),也没有任何效果。 非常感谢您的帮助!
- 您只需要 一个函数 来迭代您的输入。
- 不要使用内联 JavaScript 它是不良编码习惯的标志,会使应用程序难以调试。将您的 JS 放在一个地方并利用
Element.addEventListener()
- 使用
Node.querySelector()
和Node.querySelectorAll()
- 处理相似名称时使用
name="product[]"
语法。这将作为值数组提交给后端。 - 您可以使用Array.prototype.reduce()将所有
'[name="product[]"]:checked'
复选框值减少(累加)为一个整数 - 将您的
<script>
代码放在 结束</body>
标签之前
const EL_menu = document.querySelector("#menu");
const calcPrice = evt => {
const price = [...EL_menu.querySelectorAll('[name="product[]"]:checked')]
.reduce((n, el) => (n += +el.value, n), 0);
const nPers = +EL_menu.querySelector('[name="people"]').value || 1;
const nDays = +EL_menu.querySelector('[name="days"]').value || 1;
const total = price * nPers * nDays;
EL_menu.querySelector("[name=total]").value = `$${total.toFixed(2)}`;
}
EL_menu.querySelectorAll("input").forEach(el => el.addEventListener('input', calcPrice));
#menu label { display: block; }
<div id="menu">
<label><input type="checkbox" name="product[]" value="12"> Breakfast</label>
<label><input type="checkbox" name="product[]" value="20"> First Meal</label>
<label><input type="checkbox" name="product[]" value="15"> Second Meal</label>
<label><input type="checkbox" name="product[]" value="10"> Craft Service</label>
<label><input type="number" name="people" value="1" min="1"> Number of People</label>
<label><input type="number" name="days" value="1" min="1"> Number of Days</label><br>
Total: <input type="text" name="total" value="[=12=].00" readonly="readonly">
</div>