我无法让变量相乘。出于某些奇怪的原因,我的变量值是从输入字段中调用的,但是我什至尝试为它们提供如下的默认值,但这些默认值仍然无法使用。



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>

最佳答案

您的第一个代码段与第二个代码段不匹配。我只能假设第二个问题是“真实的”问题,第一个问题是匆忙地“解决”了这个问题,从而引入了一些错误。

您的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的操作(例如,通过字段进行制表以使其离开)。也许您没有这样做。

关于javascript - JavaScript乘法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6098897/

10-09 21:46