Javascript 计算得出的总和<;td>;价值

Javascript 计算得出的总和<;td>;价值,javascript,html,Javascript,Html,我正在创建一个计算器,将不同的阿片类药物转换为标准阿片类药物剂量。计算器可以很好地转换所有药物,但我无法在单击按钮时使用javaScript sum()函数将所有药物相加。请帮忙 值得注意的是,for循环中的“totalMED+=total[i]).value;”代码会中断药物计算功能(不显示任何值)。我不知道为什么 另外,我意识到这两个calculate()函数基本上是相同的,但我无法通过单个函数获得相关值。我似乎对循环有问题 Updated code with comments: <!

我正在创建一个计算器,将不同的阿片类药物转换为标准阿片类药物剂量。计算器可以很好地转换所有药物,但我无法在单击按钮时使用javaScript sum()函数将所有药物相加。请帮忙

值得注意的是,for循环中的“totalMED+=total[i]).value;”代码会中断药物计算功能(不显示任何值)。我不知道为什么

另外,我意识到这两个calculate()函数基本上是相同的,但我无法通过单个函数获得相关值。我似乎对循环有问题

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);
}