Javascript乘法

时间:2011-05-23 14:52:49

标签: javascript

我不能让我的变量成倍增加。出于一些奇怪的原因,我的变量值是从输入字段调用的,但我甚至试图给它们提供如下的默认值,但仍然无效。

var conMin = document.getElementById('cMin').value;
var serLev = document.getElementById('sLev').value;
var noFrames = 1800;
var noFramesTot = noFrames*24;
var coresTest = document.getElementById('coresintest').value;
var estCoreHours = 200;
var art = 20;
var coreHrs = noFrames * coresTest * art;

alert(coreHrs);

我的提醒无法正常工作,但是如果我从乘法中移除art变量,则可以正常工作。我已经尝试将parseInt()添加到每个变量,现在它只返回NaN。如果我从等式中删除art,它可以正常工作。我的coresTest在输入中定义:

var coresTest = document.getElementById('coresintest').value;

我得到的错误是我的功能正在运行而没有输出任何东西。我的整个页面源代码是。

<html>
<head>
<script>

function functionCalc() {

    // Variables
    var conMin = document.getElementById('cMin').value;
    var serLev = document.getElementById('sLev').value;
    var noFrames = 1800;
    var noFramesTot = noFrames*24;
    var coresTest = document.getElementById('coresintest').value;
    var estCoreHours = 200;
    var art = document.getElementById('art');
    var coreHrs = parseInt(noFrames) * parseInt(coresTest) * parseInt(art);

    // Hours Minutes Seconds variables
    var avgframerndrtme = document.getElementById('avgrndrtime').value;
    var secfunc = avgframerndrtme/3600;
    var secmin = avgframerndrtme/60;
    var hourfunc = avgframerndrtme/1;
    var conMin = document.getElementById('cMin').value;
    var art_value = art.options[art.selectedIndex].value;
    var switchart = document.getElementById('switchart').value;

    // Workout if Average render time is in minutes seconds etc...
    switch(art_value)
    {
        case "minutes":
            document.getElementById("switchart").value=secmin.toFixed(3);
            break;
        case "seconds":
            document.getElementById("switchart").value=secfunc.toFixed(3);
            break;
        case "hours":
            document.getElementById("switchart").value=hourfunc;
            break;
    }

    var total = coreHrs * serLev;

    document.getElementById("estDiv").innerHTML=total;
    document.getElementById("corehours").innerHTML=coreHrs;
}
</script>
</head>
<body>
    <h1>Content/SLA</h1>
    corehours: 
    <input type='text' id='cHours' onKeyUp="functionCalc()" /><br />
    content minutes:
    <input type='text' id='cMin' onKeyUp="functionCalc()" /><br />

    Service level: 
    <select onBlur="functionCalc()" onClick="functionCalc()" id="sLev">
        <option value="0.84" id="mega">Priority Mega</option>
        <option value="0.67" id="urgent">Priority Urgent</option>
        <option value="0.56" id="standard">Standard Job</option>
        <option value="0.28" id="scheduled">Scheduled Job</option>
        <option value="0.14" id="lightpass">Light Pass Job</option>
    </select><br />

    number of frames (Optional): 
    <input type='text' id='noFrames' value="1800" /><br />
    ---------------------------------------------------------------------------------
    <br />

    <h1>render time</h1>

    <!-- avg frame render hours:
        <input type='text' id='renHours' onKeyUp="functionCalc()" /><br /> -->
    average render time:
    <input  type='text' id='avgrndrtime' onKeyUp="functionCalc()" onBlur="functionCalc()" /> 

    <select onChange="functionCalc()" onBlur="functionCalc()" id="art">
        <option value="hours" id="hours">Hours</option>
        <option value="minutes" id="mins">Minutes</option>
        <option value="seconds" id="secs">Seconds</option>
    </select><br />
    cores in test :<input type='text' id='coresintest' onKeyUp="functionCalc()" />
    <br /><br />
    ---------------------------------------------------------------------------------<br />

    <h1>Estimate </h1>

    estimated Total : <div id="estDiv"></div><br>
    estimated core hours : <div id="corehours"></div>

    <br><br><br><br><br><br><br><br><br><br><br><br>AVERAGE FRAME RENDER TIME  
    <input type='text' id='switchart' onKeyUp="functionCalc()" />
    <br />
</body>
</html>

2 个答案:

答案 0 :(得分:3)

您的第一个代码段与第二个代码段不匹配。我只能假设第二个被认为是“真正的”,第一个被匆忙“修复”了这个问题,从而引入了一些错误。

您的art字段不包含数值。那是(部分)你的问题所在。如果您对其进行硬编码,那就没问题了,但在您的标记中,它是一个组合框,其中包含“小时”,“分钟”和“秒”的字符串值,而不是数值(请参阅下面的完整代码以了解如何提供使用选项的文本标签时的数值。

另外,你写道:

var art = document.getElementById('art');

应该是:

var art = document.getElementById('art').value;

虽然产生了一些完全没有感性的东西,但这些东西会起作用:

<html>
  <head>
    <script>
      function functionCalc() {

        // Variables
        var noFrames  = document.getElementById('noFrames').value;
        var coresTest = document.getElementById('coresintest').value;
        var art       = document.getElementById('art').value;
        var coreHrs   = parseInt(noFrames, 10) * parseInt(coresTest, 10) * parseInt(art, 10);

        document.getElementById("cHours").value = coreHrs;
      }
    </script>
  </head>

  <body>
    corehours: <input type='text' id='cHours' /><br />
    number of frames (Optional): <input type='text' id='noFrames' value="1800" /><br />
    <select id="art">
      <option value="5" id="hours">Hours</option>
      <option value="10" id="mins">Minutes</option>
      <option value="100" id="secs">Seconds</option>
    </select>
    <br />
    cores in test :<input type='text' id='coresintest' />
    <br />    
    <button id='coresintest' onclick="functionCalc()">calc</button>
  </body>
</html>

我再说一遍,这是非感性的,因为我不知道你想要达到的目的。

另外,请注意变量和字段名称以及ID。你有一个cHours和一个corehours,所以对于每个领域的意图有点混乱。尝试也不要混合使用XML和HTMl语法(代码中有关闭和非关闭<br />标记),虽然它与您的问题无关,但这不是一个好的做法。选择一个并坚持下去。

同时注意parseInt函数(假设你确实需要整数值),以及需要基数(第二个参数)这一事实。你需要浮点值,使用等价的parseFloat(不使用基数)。

最后,您在评论中提到“它只是没有执行[您的]脚本”。您正在注册onBlur事件,这意味着您需要执行一个触发onb​​lur的操作(比如通过字段制表以留下它们)。也许你没有这样做。

答案 1 :(得分:0)

尝试

parseInt(var);

看起来它无法检测数据类型!