Javascript 计算得出的总和<;td>;价值
我正在创建一个计算器,将不同的阿片类药物转换为标准阿片类药物剂量。计算器可以很好地转换所有药物,但我无法在单击按钮时使用javaScript sum()函数将所有药物相加。请帮忙 值得注意的是,for循环中的“totalMED+=total[i]).value;”代码会中断药物计算功能(不显示任何值)。我不知道为什么 另外,我意识到这两个calculate()函数基本上是相同的,但我无法通过单个函数获得相关值。我似乎对循环有问题Javascript 计算得出的总和<;td>;价值,javascript,html,Javascript,Html,我正在创建一个计算器,将不同的阿片类药物转换为标准阿片类药物剂量。计算器可以很好地转换所有药物,但我无法在单击按钮时使用javaScript sum()函数将所有药物相加。请帮忙 值得注意的是,for循环中的“totalMED+=total[i]).value;”代码会中断药物计算功能(不显示任何值)。我不知道为什么 另外,我意识到这两个calculate()函数基本上是相同的,但我无法通过单个函数获得相关值。我似乎对循环有问题 Updated code with comments: <!
Updated code with comments:
<!DOCTYPE html>
<html>
<head>
<SCRIPT language="javascript" src="date.js"></SCRIPT>
<style type="text/css">
...
</style>
</head>
<body>
<form>
<table>
<tr>
<th>Medications</th>
<th>Daily Dose (mg)</th>
<th>MED</th>
<th>Medications</th>
<th>Daily Dose (mg)</th>
<th>MED</th>
</tr>
<tr>
// ---this input box is really just a label----
<td><input class="tg-yw41" type=”text” name=”Tramadol” value=Tramadol id="med”
disabled></td>
// ----This input box takes user entered dosage, calls calculate() function, and
// passes the conversion factor---
<td>'TEXT"</td><td><input class ="tg-yw41" type=”text” name=”dose” value=""
placeholder="0" Id="r18c2" onchange="calculate28('.1')"></td>
//---This input box receives the value from the calculate function via Id="MED-
// Tramadol". Also includes name="sum" for sum() function.
<td><input Id="MED-Tramadol" type=”text” name="sum" value="" disabled></td>
//----The next three rows are just duplicate of above
<td><input class="tg-yw41" type=”text” name=”Sufentanil” value="Sufentanil"
disabled></td>
<td><input class ="tg-yw41" type=”text” name=”dose” value="" placeholder="0"
Id="r18c5" onchange="calculate29('60')"></td>
<td><input Id="MED-Sufentanil-intra" type=”text” name="sum" value="" disabled></td>
</tr>
<tr>
//-----Label
<td><input value="Total Daily Morphine Equivalent Dose (MED) in Milligrams"
disabled></td>
//---Input box that should receive value from sum() function (via ID="r19c2")
<td><input class ="tg-yw41" type=”text” name=”dose” value="" placeholder="0"
Id="r19c2"></td>
</tr>
//A button that when clicked calls the sum() function
</table>
<button type="button" onclick="sum()">MED total</button>
更新了带有注释的代码:
...
药物治疗
日剂量(mg)
基础教学法硕士
药物治疗
日剂量(mg)
基础教学法硕士
//---这个输入框实际上只是一个标签----
当您提取输入框的值时,它将被读取为字符串。使用parseInt()
获取数字,否则将连接字符串
因为您正在接受用户输入,所以还应该验证它。确保不获取NaN的一种简单方法是将值拉入临时变量,并在解析之前对其进行测试
var strTemp = total[i].value;
if (strTemp)
{
totalMED += parseInt(test);
}
编辑:我忽略了paren,认为这只是问题中的一个输入错误。我决定我不应该。如果您检查浏览器的JS控制台,您将很容易在通话中看到一些小错误,如不匹配的)
,因为这肯定会停止程序并提供错误消息。我将把这个答案发布在这里,如果没有帮助或很接近,那么我们可以根据需要进行编辑
首先,您确定在每个变量中都收到了正确的值吗?例如,var total=document.getElementsByName('sum').value
应返回为未定义
其次,totalMED+=total[i])值
不是有效的Javascript,即使var total=document.getElementsByName('sum').value代码>将为您提供一个实际值数组。。然后totalMED+=total[i])值
只会连接字符串。例如,如果页面上有2个input
元素,第一个元素的值为20
,第二个元素的值为25
,则输出将为02025
,因为value
类型为string
我认为这可能有助于:
Javascript
function sum()
{
var total = document.getElementsByName('sum');
var totalMED = 0;
for(var i = 0; i < total.length; i++)
{
if(!isNaN(parseInt(total[i].value)))
{
console.log(total[i].value);
totalMED += parseInt(total[i].value);
}
}
console.log(totalMED);
}
函数和()
{
var total=document.getElementsByName('sum');
var totalMED=0;
对于(变量i=0;i
这里有一个例子来证明它的工作
让我知道这是否有帮助。这是完全无效的代码totalMED+=total[i])。值代码>,右括号缺少左括号。这一定是复制错误。原文有左括号。下次我会更加小心。这组括号可能是问题的一部分。您是否可以更新您的问题,使代码不再有复制错误?使用commetnsI更新的代码以前使用过parseFloat(totalMED+=total[i])值;但是删除了它,因为从calculate()函数传递的值是作为Float传递的,我只是取相同的值。我不是循环用户输入,而是循环已经解析的计算值。我会玩它,然后再给你回复。那么,name
元素中应该包含的值肯定是float还是int?这就是你所期望的吗?如果是这样,则无需在sum
函数中再次解析数字。不幸的是,这不起作用。JSFIDLE中的代码已经在输入框中设置了值。在我的代码中,它们是在用户从不同的数据库输入后计算和添加的。不起作用。parseFloat也不是问题所在。为了清晰起见,我在上面添加了带有注释的更新代码。@Marty我知道我的代码与您的代码不完全匹配,但我是否为输入预定义了值,或者是否从另一个用户输入中获取了这些值并不重要。。主要的一点是,我修复了你的sum
方法,使其按预期工作。@Marty我已经更新了我的小提琴,使其看起来非常接近你发布的代码。我让它工作。让我知道。解析为int不是问题,因为代码已经在calculate函数()中解析,sum()从该计算值中提取。我在上面用parseFloat添加了更新的代码(没有帮助),并添加了一些注释以保持清晰。而且,我从来没有一个NaN输出,根本没有输出。我会再看看M12 Bennett的答案。正在将执行的操作打印到浏览器控制台(阅读您的其他注释,我不确定您是否正在使用它)。虽然它不是专门修复代码,但它演示了如何正确使用getElementsByName()
——也就是说,您在一个无法工作的数组上调用value
。删除该位,并假设您正在解析所有需要它的内容,那么循环将正常工作。感谢您提供有关不使用数组调用值的信息。这很有帮助。
function sum()
{
var total = document.getElementsByName('sum');
var totalMED = 0;
for(var i = 0; i < total.length; i++)
{
if(!isNaN(parseInt(total[i].value)))
{
console.log(total[i].value);
totalMED += parseInt(total[i].value);
}
}
console.log(totalMED);
}