【问题标题】:Javascript not working for calculationJavascript不适用于计算
【发布时间】:2013-06-22 23:29:56
【问题描述】:

我正在创建一个网络应用程序来帮助像我这样的糖尿病患者。我在使用 javascript 时遇到问题,它会自动设置我的胰岛素与碳水化合物的比例 {myFunction()}。它只是不会出现。代码是...

<HTML>
<head>
    <meta name="viewport" content="initial-scale=2, user-scalable=no">
    <meta name= apple-mobile-web-app-capable content= yes />
    <meta name= apple-mobile-web-app-status-bar-style content= black />
    <link rel="apple-touch-icon" href="https://dl.dropboxusercontent.com/u/11681462/untitled%20folder/Icon/Icon-SD-Iphone.png" />
    <link rel="apple-touch-icon" sizes= 114x114 href="https://dl.dropboxusercontent.com/u/11681462/untitled%20folder/Icon/Icon-HD-Iphone.png" />
    <link rel="apple-touch-icon" sizes= 72x72 href="https://dl.dropboxusercontent.com/u/11681462/untitled%20folder/Icon/Icon-SD-Ipad.png" />
    <link rel="apple-touch-icon" sizes= 144x144 href="https://dl.dropboxusercontent.com/u/11681462/untitled%20folder/Icon/Icon-HD-Ipad.png" />
    <Title> Diabetes Cal </Title>
    <script>
        function valuechanged() {
    var a = document.getElementById('textA').value;
    var b = document.getElementById('textB').value;
    var t = document.getElementById('textX').value;
    var y = document.getElementById('textY').value;
    var z = document.getElementById('textZ').value;
    var dec = t * 0.1;
    var x = parseFloat(dec).toFixed(1);
    if (+x - +y < 0) {
        var c = 0;
    }
         else
        {
            c = +x - +y;
        } 
       if (c < 0) {
        var l = 0;
       }
        else
        {
        var l = c / z;
        }
        var d = parseFloat(l).toFixed(2);
        if (a / b < 0)
        {
        var u = 0;
        }
        else
        {
        var u = a / b;
        }
        var e = parseFloat(u).toFixed(2);
        document.getElementById('labelS').innerHTML = e;
        document.getElementById('labelG').innerHTML = d;
        document.getElementById('labelX').innerHTML = +x;
        document.getElementById('labelA').innerHTML = a;
        document.getElementById('labelJ').innerHTML = +d + +e;
            }
        function myFunction(){  
    var TS=document.getElementById('textB')
     var date= new Date();
     var time = date.getHours();
    if (time<10)
         {
          CR = "8";
          }
        else if (time<16)
         {
          CR = "10";
          }
        else if (time<20)
         {
          CR = "5";
          }
        else
         {
         CR = "8";
          }
    TS.value= CR
    }
        </script>
    </head>
    <body BGColor=orange onload="valuechanged();myFunction();" > <center><br> Bolus Wizard <br>
         <div>
            Bg (without Decimal)<br> 
        <input type="text" pattern=\d* id="textX" min="25" max="333" value="25" onchange="valuechanged();" /><br><label ID="labelX">-----</label> mmol/L<br>

        </div><hr width=45% color=black size=0.5>
        <div>
            Carbs<br> <input type="text" pattern=\d* ID="textA" max=300 value="0" onchange="valuechanged();" /><br>
        </div><hr width=45% color=black size=0.5>
        <div>
            Carb Ratio<br><input type="text" pattern=\d* ID="textB" value="" onchange="valuechanged();" /> 
        </div>
        <div>
            Target<br><input type="text" pattern=\d* ID="textY" value="6" onchange="valuechanged();" />
        </div>
    <div>
            Correction Factor<br><input type="text" pattern=\d* ID="textZ" value="2" onchange="valuechanged();" />
        </div>
    <div>
            Food<br>  <label ID="labelS">  ---</label> Units
        </div>
    <p>
    <div>
            Correction<br>  <label ID="labelG">  ---</label> Units
        </div>
    <p>
        <div>
            You Need...<br>  <label ID="labelJ">  ---</label> Units
        </div>
    <p>
    </center>
    </body>
</HTML> 

我希望有人可以调试我的问题。t 令人困惑。公式是 (Blood Sugar{x}-Target{y} -:- (Correction Factor{z})+ (carbs{a} -:- Carb ratio{b}) 在我添加小数位置之前它正在工作

var dec = t * 0.1; var x = parseFloat(dec).toFixed(1);

如果有人可以教我如何为

TextZ、TextY 和 TextB

另一个页面上的区域会很棒。私信我(如果可以的话)

非常感谢SOO

【问题讨论】:

  • 顺便说一句,一元 + 只需要作为加法的保障,其他数学运算符会自动将字符串转换为数字(例如 c = +x - +y 可以是 c = x - y。您应该测试输入值以确保它们在使用它们之前会适当地转换为数字(这与您将它们转换为数字的方式无关)。
  • 如果我这样做,它会给我 NaN
  • 不应该(也不适合我),你一定是打错了别的东西。
  • 这是可能的。我会改变它,但它仍然适用于他们。

标签: javascript web-applications if-statement settings var


【解决方案1】:

你需要改变这一行:

  document.getElementById('labelA').innerHTML = a;

到这里:

  document.getElementById('textA').innerHTML = a;

【讨论】:

  • 添加解释错误发生的原因以及您的答案修复错误的原因非常有帮助。
  • 你在正确的道路上,但我根本不需要document.getElementById('labelA').innerHTML = a;。从我复制的代码中它仍然存在。
【解决方案2】:

我不知道计算是否正确,但您的代码包含一行:

document.getElementById('labelA').innerHTML = a;

问题是您的文档不包含 id 为 labelA 的元素,因此 getElementById 返回 null 然后您尝试获取 null 的 innerHTML 导致错误。

如果您注释掉该行,它似乎正在做某事。

提示:如果您使用的是 firefox、chrome 或 opera,您可以按 F12 并检查控制台是否有 javascript 错误。在您的代码中,您可以使用 console.log 从您的代码中记录,例如:

console.log("is variable a what I think it is:",a);

【讨论】:

  • +1 但严格来说,如果找不到元素,getElementById 返回null
  • @RobG 你是对的,它确实返回 null。我已经更新了答案。还有布兰登,祝你好运完成这一页。如果您需要任何帮助,请告诉我们。
  • 天堂禁止,一个符合规范的浏览器!! ;-)
猜你喜欢
  • 2022-09-28
  • 2018-09-11
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
相关资源
最近更新 更多