2011-05-23 99 views
2

我无法让我的变量乘以。出于某种奇怪的原因,我的变量值是从输入字段中调用的,但我甚至试图给它们默认值,如下所示,它仍然不起作用。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> 
+0

你会得到什么?如果是'NaN',则首先尝试解析'coresTest'。 – pimvdb 2011-05-23 14:54:08

+0

你有什么错误?它溢出了吗? – carlosfigueira 2011-05-23 14:54:21

回答

0

尝试

parseInt(var); 

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

+0

var coreHrs = parseInt(noFrames)* parseInt(coresTest)* art; – Sourav 2011-05-23 14:54:52

+0

它只是不执行我的脚本,我试试parseInt,谢谢 – lg87 2011-05-23 14:55:36

+1

你应该编辑答案不加评论。 – 2011-05-23 14:56:22

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(不使用基数)。

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

+0

@ lg87:感谢更新的细节。我重写了我的答案,详细解释了你的问题。 – haylem 2011-05-23 15:27:26

+1

有时你不只是想“+1正确”答案,而是“+5感谢你的努力”。这是其中的一次。像你这样的人让Stackoverflow摇滚:) – Konerak 2011-05-24 06:24:54

+0

@Konerak:谢谢:)我觉得像我这样的人有时在办公室非常无聊,很不幸。另外,对我来说,看这些都是很好的训练。 – haylem 2011-05-24 10:55:56